2010-09-09 38 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); 
    } 
相關問題