2017-10-16 9 views
1

J'ai le mappage ManyToOne et je souhaite supprimer tous les éléments enfants après la suppression de Parent. J'ai vu une solution sur here et j'ai appris qu'il n'est pas nécessaire d'avoir une relation bidirectionnelle pour réaliser une telle logique mais cela ne fonctionne pas dans mon cas.Hibernate @OnDelete (action = OnDeleteAction.CASCADE) ne fonctionne pas

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 

Ci-dessous est ma classe parente

@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 

Mon code de suppression

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

Le code ci-dessus supprime ordre (parent) mais pas des éléments enfants.

Mon-veille prolongée cfg.file

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

Qu'est-ce qui pourrait être mal ici?

Répondre

0

J'ai découvert l'erreur. Je comptais sur Hibernate pour créer une relation en cascade tout en créant des tables, ce qui n'était pas le cas. Je devais créer manuellement table en spécifiant

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

tout en créant table en sous-ordre MySql. Après cela, il a commencé à travailler.