代码之家  ›  专栏  ›  技术社区  ›  Dejell

如何在外键约束的表中检查对象是否与行相关

  •  2
  • Dejell  · 技术社区  · 16 年前

    我正在使用Hibernate和MySql。

    我有两张桌子:

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

    其中user.type的外键指向user\u type.id。以及城市。

    在删除用户类型表中的行之前,我想检查表中的任何行是否与其相关。

    我的列被映射,例如:

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

    我该怎么做?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Arthur Ronald    16 年前

    你说过

    我有 像用户和城市映射到这个值

    好 啊。书上说的冬眠

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

    这意味着你应该 任何相关表格。但它指出,如果其他实体引用类型,则数据库约束会防止任何不一致和

    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();
    } 
    

    是致命的 . 这意味着你 我必须退后 数据库事务并关闭当前会话。因此,您可能需要打开一个新会话。

        2
  •  0
  •   Saher Ahwal    16 年前

    将本机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;
    
    }