繁体   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