2013-05-15 47 views
0

我正在做一个小型的Web应用程序,使用hibernate查询数据库,并在接收的数据中显示一个jsp表。为此,我使用DML语句来检索DB数据。Sql ddl获取外键信息

Session session = sessionFactory.getCurrentSession(); 
    Query query = session.createSQLQuery(sqlQuery); 
    query.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE); 
    List<Map<String, Object>> resultSetList = query.list(); 

问题是当我有一个表有FK列。我所需要的......据我所知,是一个SQL DDL语句,用于检索有关表中FK列的信息,包含FK列的信息,引用的表的名称以及引用的表中的列。

I`ve搜索了很多,但没有发现任何相关的,你有什么想法DDL语句应该看起来怎么样?

非常感谢,

回答

0

这对我有效!

public Map<String, List<String>> getFKColumns(Session session, String tableName) { 

    Map<String, List<String>> fkMap = new HashMap<String, List<String>>(); 

    try { 
     Connection connection = session.connection(); 
     DatabaseMetaData meta = connection.getMetaData(); 
     ResultSet rs = meta.getImportedKeys(connection.getCatalog(), null, tableName); 

     while (rs.next()) { 

      List<String> fkValues = new ArrayList<String>(); 
      fkValues.add(rs.getString("PKTABLE_NAME")); 
      fkValues.add(rs.getString("PKCOLUMN_NAME")); 

      fkMap.put(rs.getString("FKCOLUMN_NAME"), fkValues); 
     } 

    } catch (HibernateException e) { 
     e.printStackTrace(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    return fkMap; 
}