私のアプリケーションでは、私は多くのセルを含むグリッドを持っています。これらのセルには、多くのパラメータを含めることができます。Hibernate:カスケード内のユニーク制約を持つ要素を更新する
@Entity
@Table(name = "template")
public class Grid {
private Set<Cells> cells = new HashSet<Cells>(0);
@OneToMany(fetch = FetchType.LAZY, mappedBy = "grid", orphanRemoval=true)
@Cascade(value = {CascadeType.SAVE_UPDATE, CascadeType.DELETE})
public Set<Cell> getCells() {
return this.cells;
}
}
@Entity
@Table(name = "cell", uniqueConstraints = { @UniqueConstraint(columnNames={"idcell", "row", "column" })})
public class Cell {
private Grid grid;
private int row
private int column;
private Set<Parameter> parameters = new HashSet<Parameters>(0);
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "cellidgrid", nullable = false)
@ForeignKey(name = "coref_cell_grid")
@OnDelete(action = OnDeleteAction.CASCADE)
public Grid getGrid() {
return this.grid;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "cell", orphanRemoval=true)
@Cascade(value = {CascadeType.SAVE_UPDATE, CascadeType.DELETE})
public Set<Parameter> getParameters() {
return this.parameters;
}
}
@Entity
@Table(name = "parameter")
public class Parameter {
private Cell cell;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parametercell")
@OnDelete(action = OnDeleteAction.CASCADE)
@ForeignKey(name = "coref_parameter_cell")
public Cell getCell() {
return this.cell;
}
}
グリッドの行と列ごとに1つのセルしか制限しないというユニークな制約があります。
2つのセルの位置を逆転させると、唯一の制約違反のためにグリッドの更新が失敗します。
例:私は多くのことを試みたが、何も働いていない4.
、位置3を有するセルBとの位置1、2(行1、列2)でセルAを反転します。主な解決策は、
- グリッドから2つの要素を削除し、それらを再度フラッシュして追加するか、またはそのクローンをグリッドに追加することでした。
この問題は、Parameters of the Cellでも発生する可能性があることに注意してください。
この問題を解決するにはどうすればよいですか?