JPA Verhindern von: attempted to assign id from null one-to-one property

Diskutiere Verhindern von: attempted to assign id from null one-to-one property im Allgemeines EE Bereich.
L

lusitano

Hallo Leute.

Ich habe eine Abstrakte Klasse
Code:
public abstract class ReefTankAbstract {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "reefTankIDgenerator")
    @SequenceGenerator(name = "reefTankIDgenerator", sequenceName = "reefTankIDSequenz", allocationSize = 10, initialValue = 10)
    @Column(name = "reefTankid")
    private long id;
    }
von dieser erstelle ich mehrere konkrete Klassen. Zwei dieser konkreten Klassen beinhalten 1:1 Beziehungen zu den selben Klassen
Code:
public class ReefTankWithSump extends ReefTankAbstract {

    @OneToOne(mappedBy = "reefTankWithSump", cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
    private Sand sand;

    @OneToOne(mappedBy = "reefTankWithSump", cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
    private Rock rock;
und:
Code:
public class ReefTankOnlySandRocks extends ReefTankAbstract {

    @OneToOne(mappedBy = "reefTankOnlySandRocks", cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
    private Sand sand;

    @OneToOne(mappedBy = "reefTankOnlySandRocks", cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
    private Rock rock;
Beim erstellen des Objekts werden die ID s durch die setter an die andere Klasse übergeben.
Code:
sand.setReefTankOnlySandRocks(reefTank);
allerdings will die JPA auch die ID dem Objekt der Klasse zuweisen das nicht erstellt werden soll. Ergebnis ist der oben genannte Fehler. Wie kann ich das vermeiden / verhindern ?
 
mihe7

mihe7

Ist es ein DB-Fehler? Dann müsstest Du natürlich auch das dazugehörige NOT NULL-Constraint entfernen.
 
L

lusitano

Ne. Denke nicht das es von der DB her kommt.
Setze ich die Variablen in die Abstrakte Klasse so funktioniert das Speichern ohne Probleme
Code:
    @OneToOne(mappedBy = "reefTankAbstract", cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = true)
//    @Column(name = "reefSand")
    private Sand sand;

    @OneToOne(mappedBy = "reefTankAbstract", cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = true)
//    @Column(name = "reefRock")
    private Rock rock;

Das mit Optinal könnte schon in die richtige Richtung sein. Aber wo genau ......
 
L

lusitano

Ich habe eine unidirektionale Beziehung daraus gemacht.
Hier hat es geklappt. Wie angegeben hat es die optionalen Felder ignoriert.
Warum er das in der bidirektionalen nicht macht. Das weiß de Geier.
Geh da später noch mal ran.
 
Thema: 

Verhindern von: attempted to assign id from null one-to-one property

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben