我正在使用Hibernate和MySql。
我有两张桌子:

User: id, name, type
City: id, name, type
type: id, name

其中user.type对user_type.id.和city具有外键。
在删除用户类型表中的行之前,我想检查任何表中的任何行是否与之相关。
我的列被映射,例如:
@ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "type_id")

我该怎么做?

最佳答案

你说过
我有大约100张像用户和城市这样的表映射到这个值
好 啊。Hibernate with JPA book说
您可能已经手动删除了所有其他引用
这意味着您应该手动查询任何相关的表。但它指出,如果其他实体引用类型,则数据库约束会防止任何不一致,并且您会看到外键约束异常。我认为这是你检查自己想要什么的最好方法。否则,应手动查询任何相关表。

try {
    userType = (Type) session.load(Type.class, id);

    session.delete(userType);
/**
  * or JDBCException
  * e.getCause()
  * e.getErrorCode() - vendor-specific
  */
} catch (HibernateException e) {
    // checkout Exception right here e.getCause();
}

Hibernate引发的所有异常都是致命的。这意味着您必须回滚数据库事务并关闭当前会话。所以你可能想打开一个新的会话。

09-30 16:59
查看更多