0

我有 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"

无法弄清楚还需要做什么来解决这个问题。

4

3 回答 3

0

orphanRemoval=true 确保子表没有孤儿...


@OneToMany(cascade=CascadeType.ALL, orphanRemoval=true )
于 2012-12-13T20:18:51.460 回答
0

@OneToMany(cascade=CascadeType.ALL,insertable=true,updatable=true) @JoinColumn(name="ORDER_ID")

于 2013-02-25T10:09:35.347 回答
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
于 2012-12-14T04:52:50.647 回答