私のアプリケーションでは、多くのセルを含むグリッドがあります。これらのセルには、多くのパラメーターを含めることができます。
@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 つのセルの位置を反転すると、一意の制約違反のためにグリッドの更新が失敗します。
例 : 位置 1、2 (行 1、列 2) のセル A と位置 3、4 のセル B を反転します。
私は多くのことを試しましたが、何もうまくいきませんでした。主な解決策は次のとおりです。
- グリッドから 2 つの要素を削除し、それらをフラッシュして再度追加するか、それらのクローンをグリッドに追加します。
問題は、セルのパラメーターからも発生する可能性があることに注意してください。
この問題を解決するにはどうすればよいですか?