2014-03-03 62 views
0

我正在使用JPA 2 + Hibernate 4,并且正在对模型实体执行一些CRUD操作。如果相关实体存在,则阻止实体删除

现在我需要防止某个实体(EntityB)被删除时,相关实体(EntityA)在数据库中存在:

@Entity 
public class EntityA { 
    @Id 
    private int id; 

    @OneToOne(mappedBy = "entityA", optional = false, fetch = FetchType.LAZY) 
    private EntityB entityB; 

    //... 
} 

@Entity 
public class EntityB { 
    @Id 
    private int id; 

    @OneToOne 
    @JoinColumn(name = "id") 
    private EntityA entityA; 

    //... 
} 

有没有办法实现这个使用关系选项或我应该检查EntityA在删除EntityB之前是否存在于我的dao /存储库中?

注意我需要这也为@ManyToOne的关系。

回答

1

如果您想在代码中阻止该操作,请不要删除该实体(通过手动检查)。没有可能通过注释来做到这一点。

另一方面,这听起来对我来说似乎是需要DB约束。如果这些实体已经相关,那么只需添加一个外键约束(如果没有的话)。如果不是,则考虑添加一个。

PS:如果您已经有关系,请检查CascadeType.REMOVE设置。

+0

同意数据库约束。 +1。请CascadeType.REMOVE删除这条线,它不适合,因为它只是删除参考相关领域... – solvator

+0

是的,我认为设置数据库约束是我的正确方法。谢谢。 – davioooh

0

我不认为你可以通过注释解决这个问题。您应该在之前手动检查相关实体的存在。