gpt4 book ai didi

java - hibernate @OnDelete(action = OnDeleteAction.CASCADE) 不工作

转载 作者:行者123 更新时间:2023-11-30 10:24:00 27 4
gpt4 key购买 nike

我有 ManyToOne 映射,我希望在删除 Parent 时删除所有子元素。我在 here 上看到了一个解决方案并了解到实现这种逻辑不需要双向关系,但它在我的情况下不起作用。

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);

上面的代码删除了 Order(parent) 但没有删除子元素。

我的 hibernate-cfg.file

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

这里可能出了什么问题?

最佳答案

我发现了错误。我在创建表时依靠 Hibernate 来创建级联关系,但这并没有发生。我必须通过指定

手动创建表
   `FOREIGN KEY (order_order_number) REFERENCES orders (order_number)
ON DELETE CASCADE
ON UPDATE CASCADE`

在 MySql 中创建子订单表时。在此之后它开始工作。

更新或者,当您修改任何实体时,最好使用 'hbm2ddl.auto=create',这样 hibernate 会删除现有实体并创建一个具有更新约束的全新表。

关于java - hibernate @OnDelete(action = OnDeleteAction.CASCADE) 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46779143/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com