2016-04-09 3 views
-1

は、以下のようにIは、クラスA及びBを有する:休止 - ミラーからCascade.REMOVE(逆)クラス

@Entity 
public class A implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer idd; 
    public Integer getIdd() { return idd; } 
    public void setIdd(Integer idd) { this.idd = idd; } 

    @OneToOne(mappedBy="a") 
    @Cascade(CascadeType.REMOVE) 
    //@Transient 
    private B b; 
    public B getB() { return b; } 
    public void setB(B b) { this.b = b; } 

    private int someField; 
    public int getSomeField() { return someField; } 
    public void setSomeField(int someField) { this.someField = someField; } 

    public A(int someField) { this.someField = someField; } 
    public A() {} 

} 

これでそう

@Entity 
public class B implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id; 
    public Integer getId() { return id; } 
    public void setId(Integer id) { this.id = id; } 

    @OneToOne(targetEntity = db.entityClasses.A.class) 
    @JoinColumn(name = "idd", nullable = true) 
    private A a; 
    public A getA() { return a; } 
    public void setA(A a) { this.a = a; } 

    private int ssomeField; 
    public int getSsomeField() { return ssomeField; } 
    public void setSsomeField(int someField) { this.ssomeField = someField; } 

    public B() { } 
    public B(A a, int ssomeField) { 
    this.a = a; 
    this.ssomeField = ssomeField; 
    } 
} 

Bは一次元ですAとの1対1の関連付けであり、Bが所有者です。 Aの行を削除するたびに、対応する行Bを削除したいと考えています。 このため、私はAの削除をカスケードしています。

他のすべて - これらのテーブルへの挿入は、Bに外部キー参照がない場合は常にAから削除されます。

ただし、行を削除する場合は、id=5の行にABという行にFK refがあります。 Aのその行に、私はTEH次のエラーを取得しています:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`PrjTEMP`.`b`, CONSTRAINT `FK4253917D0F` FOREIGN KEY (`idd`) REFERENCES `a` (`idd`)) 

このコードで何が悪いです?

+0

「A」エンティティも削除するjpaコードを投稿してください。 JPA APIまたはHibernate APIを使用していますか? –

+0

@NándorElődFekete - delete()はそれを作成しました - クエリで削除していました。これをansと書くと私は受け入れます。 – Roam

答えて

-2

が削除されました。それを削除()しました。