3

多対多の関係を持つEmployeeとの2 つのクラスがあります。Award

削除しようとすると、制約違反エラーが発生します。私はすべての投稿を調べましたが、どれも役に立ちませんでした。

これはコードです:

@Entity
@Table(name="TB_AWARD")
public class Award implements Serializable{


    @Id @GeneratedValue
    @Column(name="AWARD_ID")
    private long awardId;

    @ManyToMany(mappedBy="awards")
    @NotFound(action=NotFoundAction.IGNORE)
    private Collection<Employee> employee = new ArrayList<Employee>();

    @Column(name="AWARD_TYPE")
    private String awardType;

    @Column(name="AWARD_DATE")
    private Date awardDate;

    @Column(name="AWARD_DETAILS")
    @Lob
    private String awardDetails;

    @Column(name="REMARK")
    private String remark;

@Entity
@Table(name="TB_EMPLOYEE")
public class Employee implements Serializable {

    @Id @GeneratedValue
    @Column(name="EMPLOYEE_ID")
    private long employeeID;

        @ManyToMany(cascade= CascadeType.ALL)
    private Collection<Award> awards;
4

2 に答える 2

1

マッピングが間違っています。次のようにしてみてください。

@Entity
@Table(name="TB_AWARD")
public class Award implements Serializable{


    @Id @GeneratedValue
    @Column(name="AWARD_ID")
    private long awardId;

    @ManyToMany(targetEntity=Employee.class, cascade = CascadeType.ALL)
    @JoinTable(name = "AWARD_EMPLOYEE", joinColumns = { @JoinColumn(name ="AWARD_ID")},
    inverseJoinColumns = { @JoinColumn(name = "EMPLOYEE_ID") })
    @NotFound(action=NotFoundAction.IGNORE)
    private Collection<Employee> employees = new ArrayList<Employee>();

    @Column(name="AWARD_TYPE")
    private String awardType;

    @Column(name="AWARD_DATE")
    private Date awardDate;

    @Column(name="AWARD_DETAILS")
    @Lob
    private String awardDetails;

    @Column(name="REMARK")
    private String remark;

@Entity
@Table(name="TB_EMPLOYEE")
public class Employee implements Serializable {

    @Id @GeneratedValue
    @Column(name="EMPLOYEE_ID")
    private long employeeID;

    @ManyToMany(
    cascade = CascadeType.ALL,
    mappedBy = "employees",
    targetEntity = Award.class
    )
    private Collection<Award> awards; //create the getter for this guy

以前のリファレンスの例を常に見てください。そうすれば、あなたの人生はずっと楽になります。;)

于 2012-07-26T21:34:36.100 に答える
0

休止状態からではなく、データベースから取得します。hibernate が削除するとき、最初に参照を無効にします。データベースの制約を削除します。また、休止状態の sql ログを有効にするか、データベース プロファイラーで sql を参照して、休止状態が何を行うかを確認する必要があります。制約違反の原因となった SQL が表示されます。

于 2012-07-26T19:31:27.090 に答える