Ich habe zwei assoziierte entites:warum Hibernate Update DB nach evict
@Entity
@DynamicUpdate(true)
public class DreamTaskInfo {
private DreamInfo dreamInfo;
@ManyToOne
@JoinColumn(name = "DREAM_INFO_ID", nullable = false)
public DreamInfo getDreamInfo() {
return dreamInfo;
}
...
}
@Entity
@DynamicUpdate(true)
public class DreamInfo {
private Set<DreamTaskInfo> dreamTasks = new LinkedHashSet<>();
@OneToMany(mappedBy = "dreamInfo",cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@OrderBy("remindTime")
public Set<DreamTaskInfo> getDreamTasks() {
return dreamTasks;
}
...
}
Ich möchte ein DreamTaskInfo Daten von DB für Nur-Lese-Anwendung verwenden, so dass ich dies tun:
DreamTaskInfo task = this.get(id);//query from db
getSession().evict(task);//getSession().contains(task)==false
Aber ich finde out Hibernate führen immer eine Aktualisierung sql für diese Aufgabe beim Flush aus. Endlich benutze ich getSession(). Clear() statt zu vertreiben und es funktioniert. Vielleicht eifrig holen oder Assoziation Ergebnis in etwas in Sitzung? Eigentlich ändere ich nichts manuell und Hibernate Update automatisch, so dass es nichts mit diesem question zu tun hat.
Mögliches Duplikat von [Hibernate: evict() ein persistentes Objekt beim Speichern seiner Änderungen] (http://stackoverflow.com/questions/6836326/hibernate-evict-a-persistent-object-while-storing-its-changes) –
Können Sie die Update-Abfrage zusammen mit ihren Parametern veröffentlichen. Es lohnt sich zu debuggen, um zu sehen, warum das Update generiert wurde. –
@Vlad Mihalcea, tatsächlich aktualisiert es jedes Feld des Datensatzes mit Wert Abfrage von DB. – yuxh