Java >> Java tutorial >  >> Tag >> transient

Sådan repareres Hibernate-objektet refererer til en ikke-gemt forbigående instans - gem den forbigående instans før tømningsfejl

Du skal inkludere cascade="all" (hvis du bruger xml) eller cascade=CascadeType.ALL (hvis du bruger anmærkninger) på din samlingskortlægning.

Dette sker, fordi du har en samling i din enhed, og den samling har et eller flere elementer, som ikke er til stede i databasen. Ved at specificere ovenstående muligheder fortæller du hibernate at gemme dem i databasen, når de gemmer deres forælder.


Jeg tror, ​​at dette måske bare er et gentagelsessvar, men for at præcisere fik jeg dette på en @OneToOne kortlægning samt en @OneToMany . I begge tilfælde var det det faktum, at Child objekt, jeg føjede til Parent blev ikke gemt i databasen endnu. Så da jeg tilføjede Child til Parent , og gemte derefter Parent , Dvale vil kaste "object references an unsaved transient instance - save the transient instance before flushing" besked, når du gemmer forælderen.

Tilføjelse af cascade = {CascadeType.ALL}Parent's henvisning til Child løste problemet i begge tilfælde. Dette gemte Child og Parent .

Beklager eventuelle gentagne svar, ville bare præcisere yderligere for folk.

@OneToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "performancelog_id")
public PerformanceLog getPerformanceLog() {
    return performanceLog;
}

Dette sker, når du gemmer et objekt, når Hibernate mener, at det skal gemme et objekt, der er knyttet til det, du gemmer.

Jeg havde dette problem og ønskede ikke at gemme ændringer til det refererede objekt, så jeg ønskede, at kaskadetypen skulle være NONE.

Tricket er at sikre, at ID og VERSION i det refererede objekt er indstillet, så Hibernate ikke tror, ​​at det refererede objekt er et nyt objekt, der skal gemmes. Dette virkede for mig.

Gennemse alle relationerne i den klasse, du gemmer, for at beregne de tilknyttede objekter (og de tilknyttede objekter til de tilknyttede objekter) og sikre, at ID'et og VERSION er indstillet i alle objekter i objekttræet.


Java tag