Reputation: 253
I have ManyToOne mapping and I wish to delete all the child elements upon deletion of Parent. I saw a solution over here and came to know that it is not necessary to have bi-directional relation to achieve such logic but it is not working in my case.
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
Below is my parent class
@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
My deletion code
Order result =session.get(Order.class, 1000000000l);
session.delete(result);
The above code deletes Order(parent) but not child elements.
My hibernate-cfg.file
<property name="hbm2ddl.auto">update</property>
What could be wrong here ?
Upvotes: 4
Views: 4439
Reputation: 253
I found out the mistake. I was relying on Hibernate to create cascading relationship while creating tables, which was not happening. I had to manually create table by specifying
`FOREIGN KEY (order_order_number) REFERENCES orders (order_number)
ON DELETE CASCADE
ON UPDATE CASCADE`
while creating suborder table in MySql. After this it started working.
Update
Or when you modify any entity better use 'hbm2ddl.auto=create'
so that hibernate delete existing one and create a fresh new table with updated constraints.
Upvotes: 1