【问题标题】:Hibernate 3 On delete cascade休眠3在删除级联
【发布时间】:2011-12-01 10:59:15
【问题描述】:

我有一个关于预订的多对一映射。 预订必须属于一个房间。一个房间可以有多个预订。

如果一个房间被删除,我希望该房间的所有预订也被删除。 我将如何使用休眠注释来执行此操作?

@Entity
public class Booking implements Serializable{

    @Id @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private Date startDate;
    private Date endDate;
    private Date createdDate;

    @ManyToOne
    @JoinColumn (name = "roomId")
    private Room room;
...
}

【问题讨论】:

    标签: java hibernate orm annotations cascade


    【解决方案1】:

    在您的Room 实体中,您可以拥有一个

    @OneToMany(cascade=CascadeType.REMOVE) 
    private List<Booking> bookings;
    

    【讨论】:

    • 我的房间实体中没有预订列表。如果可能的话,我想保持这种状态。有没有办法在不将预订引入房间的情况下做到这一点?
    • 没有。但是添加集合不需要任何费用(默认情况下它会是惰性的)
    【解决方案2】:

    使用

     @ManyToOne(cascade = CascadeType.REMOVE)
    

    【讨论】:

    • 当某些预订被删除时,这将删除房间,或者如果房间与其他预订相关联,它肯定会尝试并可能导致违反约束。
    • 这不起作用...尝试删除房间时仍然出现约束错误。
    • @Andrei,我们都错了,因为多对一注释没有 orphanRemoval 属性。 :) 但谢谢。我没注意它是多对一的,我以为是一对多的:)我稍后会删除它:)+1评论
    • 是的,虽然值得一提的是 JPA 的 ManyToOne 支持级联删除,尽管规范说由实现者决定要做什么(意味着它可以选择什么都不做)
    猜你喜欢
    • 2010-11-03
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多