Как получить Java-типы данных столбцов из базы данных, используя Hibernate? - PullRequest
1 голос
/ 09 сентября 2010

Я хочу получить типы данных java столбцов таблицы в MySql, используя hibernate, чтобы я мог динамически преобразовывать свои входные данные в соответствующий тип данных при вставке в базу данных.

Один из способов - прочитать class-name.hbm.xml и получить информацию о типе данных, но я хочу, чтобы типы данных были прямо из базы данных, а не из любых XML-файлов конфигурации, поскольку XML-файлы могут быть ошибочными.

Другой способ - использовать AbstractEntityPersister.getPropertyType(column-name).toString(), но он возвращает тип данных hibernate вместо соответствующих типов java.

Есть ли способ, которым я могу этого достичь?

Ответы [ 3 ]

3 голосов
/ 09 сентября 2010

Выполните следующие действия (немного хакки)

    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 );
    }
1 голос
/ 04 октября 2010

Я достиг требуемой функциональности, запросив таблицу ColumnsMetaData из information_schema (схема, содержащая словарь данных ) MySQL

1 голос
/ 09 сентября 2010

Вы можете использовать AbstractEntityPersister.getPropertyColumnNames(...), затем выполнить необработанный JDBC-запрос к этому столбцу и использовать ResultSet.getColumnType()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...