JPA One-Many Relation子表行未被删除

时间:2012-12-13 20:07:37

标签: hibernate jpa

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

无法弄清楚还有什么方法可以解决这个问题。

3 个答案:

答案 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”)