Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查任何对象是否与具有外键约束的表中的行相关_Java_Mysql_Hibernate - Fatal编程技术网

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

Java 如何检查任何对象是否与具有外键约束的表中的行相关,java,mysql,hibernate,Java,Mysql,Hibernate,我正在使用Hibernate和MySql 我有两张桌子: User: id, name, type City: id, name, type type: id, name 其中user.type具有用户\ u type.id的外键。还有这个城市 在删除user_type表中的行之前,我想检查任何表中的任何行是否与之相关 我的列被映射,例如: @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "type_id") 如何操作?将

我正在使用Hibernate和MySql

我有两张桌子:

User: id, name, type
City: id, name, type
type: id, name
其中user.type具有用户\ u type.id的外键。还有这个城市

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

我的列被映射,例如:

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

如何操作?

将本机SQL与Hibernate一起使用:

  boolean canDeleteType(ind type_id){
         Session s = HibernateUtil.getSessionFactory(); 
         s.beginTransaction();
         Query q = s.createQuery("SELECT User.type_id From User");
         List l = q.list();

    if(l.contains(type_id){
   return false;
}
return false;

}
对你的城市表也是如此。

你说过

我有大约100个表,如映射到该值的用户和城市

嗯。用JPA书冬眠

您可能已经手动删除了所有其他引用

这意味着您应该手动查询任何相关表。但它表示,如果其他实体引用类型,数据库约束将防止任何不一致,并且您将看到外键约束异常。我认为这是最好的方式,你可以看看你想要什么。否则,您应该手动查询任何相关表

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引发的所有异常都是致命的。这意味着您必须回滚数据库事务并关闭当前会话。因此,您可能需要打开一个新会话。

您的表是如何映射的?我的意思是,这种关系是否反映在映射中?因为Hibernate可以帮你检查,并且可以级联删除或者你需要的任何东西。我用Mapping编辑了我的问题mySQL是否允许你删除表类型中的一行,如果它相关??它将通过一个异常,不是吗(因为它是一个类型_id是外键相关的)?它将抛出一个excation。但是我想在它抛出任何例外之前知道它。如果可能,请让我知道您作为解决方法做了什么。非常感谢。