我有2个实体Order和Item,它们相关为1:N,Order是父表,item是子表。当我删除订单时,我也希望删除相应的项目。但它没有发生,而是将子表中的OrderId设置为“null”。这是在Item表中的数据库中创建孤立行。
这是我的配置:我使用Spring,Hibernate作为JPAVendor和mysql数据库
@Entity
@Table(name="T_ORDER")
public class Order {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String customer;
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="ORDER_ID")
private Collection items = new LinkedHashSet();
}
物品实体
@Entity
public class Item {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@ManyToOne
private Order order;
private String product;
private double price;
private int quantity;
我只设置了2JPA属性
key="hibernate.show_sql"=true
key="hibernate.hbm2ddl.auto"
无法弄清楚还有什么方法可以解决这个问题。
答案 0 :(得分:0)
orphanRemoval = true确保子表没有孤儿......
@OneToMany(cascade=CascadeType.ALL, orphanRemoval=true )
答案 1 :(得分:0)
删除JPA级联 - javax.persistence.CascadeType ,将其替换为Hibernate级联 - org.hibernate.annotations.Cascade , CascadeType.XXXXX < /强>
它看起来像JPA和Hibernate级联注释之间的不兼容问题。
JPA仅支持
– Persist
– Merge
– Remove
– Refresh
– All
JAPA目前没有提供这些Hibernate 其他额外的级联选项级联选项
– save-update
– delete
– lock
– evict
– delete-orphan
答案 2 :(得分:0)
@OneToMany(级联= CascadeType.ALL,插入=真,可更新=真) @JoinColumn(名称= “ORDER_ID”)