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?