簡體   English   中英

如何使用Hibernate從數據庫中檢索列的Java數據類型?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM