2010-09-09 42 views
1

我想使用hibernate检索MySql中一个表的列的Java数据类型,以便在插入数据库时​​动态地将我的输入数据转换为相应的数据类型。如何使用Hibernate从数据库中检索列的Java数据类型?

一种方法是读取class-name.hbm.xml并检索数据类型信息,但我希望数据类型直接来自数据库,而不是来自任何配置XML,因为XML可能是错误的。

另一种方法是使用AbstractEntityPersister.getPropertyType(column-name).toString(),但返回的是hibernate数据类型而不是相应的java类型。

有什么办法可以实现这个目标吗?

回答

0

我通过查询ColumnsMetaData实现所需的功能来自的信息表information_schema(含有MySQL的模式数据字典

0

您可以使用AbstractEntityPersister.getPropertyColumnNames(...),然后发出该列有原始JDBC查询,并使用ResultSet.getColumnType()

3

执行下列操作(位哈克寿)

Class clazz = ...; 
    SessionFactory sessionFactory = ...; 

    ClassMetadata classMetadata = sessionFactory.getClassMetadata(clazz); 

    // bit of a hack, relies on knowing that SessionFactoryImpl implements Mapping 
    Mapping mapping = (Mapping)sessionFactory; 

    for (String propertyName : classMetadata.getPropertyNames()) 
    { 
     Type type = classMetadata.getPropertyType(propertyName); 

     if (type.isCollectionType()) 
      continue; 

     // TODO: do something with the result 
     type.sqlTypes(mapping); 
    } 
相关问题