2010-09-09 3 views
1

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

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

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

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

ответ

0

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

0

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

3

Выполните следующие действия (бит Hacky Тхо)

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); 
    } 
Смежные вопросы