Dodanie nowego wierszu w JPA

0

Witam,

Mam taki problem.

Pobieram Obiekt(Używam InheritanceType.JOINED, GenerationType.SEQUENCE) z bazy danych.
Pobrany obiekt modyfikuje, oraz zmieniam id na null.
W czasie zapisu tego zmodyfikowanego obketu dostaje wyątek:

identyfier of an instance .....SSO was altered from 175 to null

0

Wykonałem metodę clear przed metodą persist.
Id jest typu Long.

Dalej ten sam wyjątek otrzymuję :(

0

Czy typy się zgadzają tzn. masz w obu przypadkach Longi (hibernate, bean)?

0

Czy dobrze rozumiem:

  1. Pobierasz obiekt z bazy
  2. Modyfikujesz ID
  3. Próbujesz zapisać?

A próbowałeś na kopii obiektu?

0

Tak poniżej wygląda funkcje.
currentChannel, to obiekt pobrany z bazy.

private DistributionChannel aktualizujReklamacje(DistributionChannel currentChannel, HttpServletRequest request) throws Exception {
        BigDecimal kwota = null;
        DistributionChannel updateChannel;
        
        StatusZgloszenia status = StatusZgloszenia.valueOf(getRequestParameter(request, "status_zgloszenia"));
        String odpowiedzOR = request.getParameter("odpowiedz_or");
        String odpowiedzOPL = request.getParameter("odpowiedz_opl");
        String dodatkowaOdpowiedzOR = request.getParameter("dodatkowa_odpowiedz_or");
        String dodatkowaOdpowiedzOPL = request.getParameter("dodatkowa_odpowiedz_opl");
        String kwotaUznanejReklamacji = request.getParameter("kwota_uznanej_reklamacji");
        if(kwotaUznanejReklamacji != null && !kwotaUznanejReklamacji.isEmpty())
            kwota = new BigDecimal(kwotaUznanejReklamacji);
        WynikReklamacji wynikreklamacji = WynikReklamacji.valueOf(getRequestParameter(request, "uznanie_reklamacji"));
        
        updateChannel = currentChannel;
        updateChannel.setId(null); //Np jak wpiszę wartość 200L, to dostaję ten sam wyjątek, tylko zamiast null pisze 200.
        updateChannel.setStatusReklamacji(status);
        updateChannel.setWynikReklamacji(wynikreklamacji);
        updateChannel.setOdpowiedzOR(odpowiedzOR);
        updateChannel.setOdpowiedzOPL(odpowiedzOPL);
        updateChannel.setDodatkowaOdpowiedzOR(dodatkowaOdpowiedzOR);
        updateChannel.setDodatkowaOdpowiedzOPL(dodatkowaOdpowiedzOPL);
        updateChannel.setKwotaUznanejReklamacji(kwota);
        updateChannel.setDataZgloszenia(new Date());
        
        return updateChannel;
    }
 

Co masz na myśli mówiąc, kopiować obiekt??
Użyć funkcji clone??

0

Zadziałało!!!!
Zmieniłem z persist na merge i poszło.
Dlaczego??

1 użytkowników online, w tym zalogowanych: 0, gości: 1