2

Claim(親) とClaimInsurance(子)の 2 つのクラスがあります。それらは次のとおりです。

public class Claim {    
  private SortedSet<ClaimInsurance> claimInsurances = new TreeSet<ClaimInsurance>();

  @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="claim", orphanRemoval=true)
  @Sort(type=SortType.NATURAL)
  public SortedSet<ClaimInsurance> getClaimInsurances() {
    return this.claimInsurances;
  }

  public void setClaimInsurances(SortedSet<ClaimInsurance> claimInsurances) {
    this.claimInsurances = claimInsurances;
  }
}

と:

public class ClaimInsurance implements java.io.Serializable, Comparable<ClaimInsurance> {
  private Claim claim;

  @ManyToOne(fetch=FetchType.LAZY)
  @JoinColumn(name="ClaimId", nullable=false)
  public Claim getClaim() {
    return this.claim;
  }

  public void setClaim(Claim claim) {
    this.claim = claim;
  }
}

を削除しようとすると、Claim次の例外が発生します

org.hibernate.exception.ConstraintViolationException: could not delete: [com.omnimd.pms.beans.Claim#201]
...
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The DELETE statement conflicted with the REFERENCE constraint "FK_RCMSClaimInsuranceTable_RCMSClaimTable". The conflict occurred in database "Omnimdv12", table "dbo.RCMSClaimInsuranceTable", column 'ClaimId'.

claimInsurancesクラスのマッピングを次のように変更するとClaim、すべて正常に動作します。

private Set<ClaimInsurance> claimInsurances = new HashSet<ClaimInsurance>();

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="claim", orphanRemoval=true)
public Set<ClaimInsurance> getClaimInsurances() {
  return this.claimInsurances;
}

public void setClaimInsurances(Set<ClaimInsurance> claimInsurances) {
  this.claimInsurances = claimInsurances;
}

Setマッピングで( )を使用すると問題が発生するようですが、HashSet代わりにSortedSet( TreeSet) を使用するとエラーが発生します。

実際の問題は何ですか?私は何が欠けていますか?

4

1 に答える 1

0

わかった。問題は解決しました。@JB Nizet の助けを借りて

同じために、同じ結果をもたらすClaimものがいくつかClaimInsuranceありました。compareTo()

同じものに対して異なる値を返すように変更しcompareTo()ました..それだけです。現在は機能しています。ClaimInsuranceClaim

于 2012-06-01T06:18:40.497 に答える