2017-10-16 5 views
1

私はManyToOneマッピングを持っています.Parentを削除すると、すべての子要素を削除したいと思います。私はhere以上の解決策を見て、そのような論理を達成するために双方向関係を持つ必要はないが、私の場合はうまくいかないことを知りました。Hibernate @OnDelete(action = OnDeleteAction.CASCADE)が動作しない

import javax.persistence.ManyToOne; 
import javax.persistence.SequenceGenerator; 
import javax.persistence.Table; 
import org.hibernate.annotations.Cascade; 
import org.hibernate.annotations.CascadeType; 
import org.hibernate.annotations.OnDelete; 
import org.hibernate.annotations.OnDeleteAction; 

@Entity 
@Table(name="SubOrder") 
public class SubOrder { 

@Id 
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="order_seq") 
@SequenceGenerator(name = "order_seq", initialValue=1000000000, allocationSize=1, sequenceName="order_auto_seq") 
@Column(name="sub_order_id") 
private long subOrder; 

@Column(name="product_name" , length=50) 
private String productName; 

@Column(name="Date") 
private String date; 

@ManyToOne() 
@Cascade({CascadeType.PERSIST}) 
@OnDelete(action = OnDeleteAction.CASCADE) 
private Order order; 

public Order getOrder() { 
    return order; 
} 

//Getters and setters 

は以下

@Entity 
@Table(name="Orders") 
public class Order { 

@Id 
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="order_seq") 
@SequenceGenerator(name = "order_seq", initialValue=1000000000, allocationSize=1, sequenceName="order_auto_seq") 
@Column(name="order_number") 
private long orderNumber; 

@Temporal(TemporalType.TIMESTAMP) 
@Column(name="Order_date") 
private Date date= new Date(); 

//Getters and setters 

マイ削除コード

Order result =session.get(Order.class, 1000000000l); 
session.delete(result); 

上記のコードは、注文(親)ではなく、子要素を削除し、私の親クラスです。

マイ休止-cfg.fileここで間違っている可能性が何

<property name="hbm2ddl.auto">update</property> 

答えて

0

私は間違いを発見しました。私はテーブルを作成している間にカスケード関係を作成するためにHibernateに依存していましたが、これは起こっていませんでした。テーブルを手動で作成する必要がありました。

`FOREIGN KEY (order_order_number) REFERENCES orders (order_number) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE` 

MySqlでサブオーダーテーブルを作成していました。その後、作業を​​開始しました。

関連する問題