I have an Entity Project:
Code:
public class Project {
[...]
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@org.hibernate.annotations.IndexColumn(name="indexcol_hitlists")
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.ALL,
org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private List<SequenceList> hitlists;
[...]
Manchmal wenn ich eine SequenceList ("hitlist") aus der hitlists
Collection entferne, und saveOrUpdate(project) aufrufe, dann bekomme ich:
Code:
Violation of unique constraint SYS_CT_79: duplicate value(s) for column(s) HITLISTS_ID in statement [update projects_sequencelists set hitlists_id=? where projects_id=? and indexcol_hitlists=?]
=> hier ist die Debugausgabe:
Code:
Deleting rows of collection: [de.bhc.pepa.Project.hitlists#1]
about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
delete from projects_sequencelists where projects_id=? and indexcol_hitlists=?
Hibernate: delete from projects_sequencelists where projects_id=? and indexcol_hitlists=?
preparing statement
binding '1' to parameter: 1
binding '7' to parameter: 2
done deleting collection rows: 1 deleted
Updating rows of collection: de.bhc.pepa.Project.hitlists#1
about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
closing statement
about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
update projects_sequencelists set hitlists_id=? where projects_id=? and indexcol_hitlists=?
Hibernate: update projects_sequencelists set hitlists_id=? where projects_id=? and indexcol_hitlists=?
preparing statement
binding '7' to parameter: 1
binding '1' to parameter: 2
binding '1' to parameter: 3
about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
closing statement
=> diese beiden queries werden ausgeführt:
Code:
delete from projects_sequencelists where projects_id=1 and indexcol_hitlists=7;
update projects_sequencelists set hitlists_id=7 where projects_id=1 and indexcol_hitlists=1;
Das ist wirklich komisch: indexcol_hitlists=1 ist die SequenceList, die ich
vor dem saveOrUpdate aus der Collection entfernt habe. Die erste delete-query
hat scheinbar gar nichts damit zu tun...
Hat jemand noch Vorschläge, wie ich dies debuggen kann?
Was sind die Nachteile der Bagsemantik wenn ich schon überall Lazy
Fetching benutze: ist das nur, dass die Reihenfolge nicht garantiert ist?
Die Reihenfolge bekomme ich doch mit @OrderBy wieder hin (ich habe
ein Feld, das für die Sortierung geeignet ist)?
Vielen Dank,