[英]How to retrieve the java data types of columns from the database using Hibernate?
我想使用休眠方式在MySql中檢索表的列的Java數據類型,以便在插入數據庫時可以將輸入數據動態轉換為相應的數據類型。
一種方法是讀取class-name.hbm.xml
並檢索數據類型信息,但我希望直接從數據庫而不是從任何配置XML讀取數據類型,因為XML可能是錯誤的。
另一種方法是使用AbstractEntityPersister.getPropertyType(column-name).toString()
但是它將返回休眠數據類型,而不是相應的java類型。
有什么辦法可以實現?
執行以下操作(位hacky tho)
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 );
}
您可以使用AbstractEntityPersister.getPropertyColumnNames(...)
,然后對該列執行原始JDBC查詢,並使用ResultSet.getColumnType()
我通過從information_schema (包含MySQL 數據字典的模式)中查詢ColumnsMetaData表來實現了所需的功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.