に削除トリガ:私はentityManager.merge(顧客)を呼び出すとJPAは、私がお客様とBusinessUnitの間に多くの関係に多く持ってテーブルに参加
public class Customer extends AbstractEntity {
@JoinTable(name = "CUS_BUS_UNITS",
joinColumns = {
@JoinColumn(name = "CUS_ID", referencedColumnName = "CUS_ID")},
inverseJoinColumns = {
@JoinColumn(name = "BUS_ID", referencedColumnName = "BUS_ID")})
@ManyToMany
private Collection<BusinessUnit> businessUnits;
}
public class BusinessUnit extends AbstractEntity {
@ManyToMany(mappedBy = "businessUnits")
private Collection<Customer> customers;
}
を。
休止状態:更新顧客はCUS_DESCR = ?, CUS_NAME = ?, CUS_ENABLED =を設定し、顧客に私は、ログ内のこれらの2つのSQLコマンドを参照してください(すでにDBには、変更されていませんか)? ここで、CUS_ID =?休止状態:CUS_BUS_UNITSから削除します。どこでCUS_ID =?
なぜ、休止状態で結合テーブルからレコードを削除しようとしていますか? 私は顧客レコードを更新する必要があり、レコードを結合テーブルに追加する必要があります。顧客のビジネスユニットを追加または削除したかどうかによって異なります。ビジネスユニットを更新、削除、挿入しないでください。
EDIT: 私のequals/hashCodeをは(AbstractEntityで定義されている)されています
public int hashCode() {
if (getId() != null) {
return getId().hashCode();
}
return super.hashCode();
}
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
AbstractEntity other = (AbstractEntity) obj;
if (getId() == null || other.getId() == null) {
return false;
}
if (!getId().equals(other.getId())) {
return false;
}
return true;
}
EDIT 2 フォームのコンバータ:
@FacesConverter("businessUnitConverter")
public class BusinessUnitConverter implements Converter {
/**
* {@inheritDoc}
*/
@Override
public String getAsString(FacesContext context, UIComponent component, Object object) {
return ((BusinessUnit) object).getId().toString();
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
BusinessUnit businessUnit = new BusinessUnit();
businessUnit.setId(Long.parseLong(value));
return businessUnit;
}
}
CustomerとBusinessUnitはどちらも正しいhashcodeとequalsメソッドを持っていますか? –
私はSOのためにそれを削除しましたが、equals/hashcodeのエンティティIDを使用するこれらのメソッドを持つ抽象親を持っています。 – DominikM
新しい 'BusinessUnit'を追加するときに、hibernateはidを設定します。これはオブジェクトの" identity "を' equals'実装で変更し、混乱を招く可能性があります。あなたは 'equals'と' hashCode'を使わずに試して、問題がまだ存在するかどうか確認できますか? –