java - 如何检查任何对象是否与具有外键约束的表中的行相关

标签 java mysql hibernate

我正在使用 Hibernate 和 MySql。

我有 2 个表:

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

其中 user.type 具有指向 user_type.id 的外键。以及城市。

我想在删除 user_type 表中的行之前,检查任何表中的任何行是否与它相关。

例如,我的列已映射:

@ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "type_id")

我该怎么做?

最佳答案

你说

I have around 100 tables like User and City mapped to this value

好的。 Hibernate with JPA 书说

You may have removed all other references manually

这意味着您应该手动查询任何相关表。但它表示,如果其他实体引用类型,数据库约束会防止任何不一致,并且您会看到外键约束异常。我认为这是检查所需内容的最佳方式。否则,您应该手动查询任何相关表。

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 抛出的所有异常都是致命的。这意味着您必须回滚数据库事务并关闭当前 session 。所以你可能想打开一个新 session 。

关于java - 如何检查任何对象是否与具有外键约束的表中的行相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3433988/

相关文章:

java - 如何将 Hibernate 类映射转换为 Spring 应用程序上下文?

java - 如何在Java应用程序中设置H2嵌入式数据库以在小型网络中使用?

python - 如果不存在匹配项,如何插入 MySQL 行

hibernate - grails 线程-> hibernateException : No Hibernate session bound to thread

java - hibernate 保存实体

php - Mysql JOIN 我需要 FOREACH 吗?

java - 如何将 PrimaryAddress 中的字段直接保留在我的表中?在我的表中,我没有 PrimaryAddress 列,但其中的所有字段都是列本身

java - 如何从字符串中获取数字值,并使用 for 循环将它们转换为 int?

java - 类型中的方法不适用于参数

java - Java中的冒泡排序 - 最大整数未出现在最终排序中