2014-11-02 18 views
0

我是新来的休眠,我不明白Hibernate删除和保存如何完全内部执行。我不得不在现有的代码中修复一些东西。代码当前使用的表没有定义外键,但表中没有定义删除级联。可以Session.Delete表条目,即使该表有一个外键约束没有删除级联或null指定

仍然现有的代码确实从原始表中删除条目。

我无法弄清楚代码当前如何处理它。是否可以为外键删除定义一些休眠设置,而不是在数据库中定义。 如果是,那么如何。任何提示都会有所帮助。

回答

0

级联删除也可以在休眠中定义。

参见实施例(使用JPA注解):

@Entity 
public class User { 
    @Id 
    private Long id; 

    @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE) 
    private List<Address> addresses; 
} 

@Entity 
public class Address { 
    @Id 
    private Long id; 

    private String cityName; 

    @ManyToOne 
    private User user; 

} 

现在假设此代码示例:

User user = entityManager.find(User.class, 1L); 
entityManager.remove(user); 

删除用户将触发级联删除相关联的地址的。

请注意使用HQL(或JPQL)。它不会触发级联删除,例如, entityManager.createQuery(“delete user where id = 1”)。executeUpdate()会导致FK参考错误,可能是

相关问题