从休眠中检索DB列长度?

时间:2016-03-15 13:44:17

标签: java database oracle hibernate

从休眠中检索Db列长度。我用过:

Property property = (Property)persistentClass.getProperty(propertyName);

                 Column col = (Column)property.getColumnIterator().next();

                 int length = col.getLength();

                System.out.print("\t");
                System.out.print(persister.getPropertyColumnNames(propertyName)[0]);



                System.out.print("\t  Column length :::");
                System.out.print(length);

我的表结构是:

TYPE_ID          NUMBER                            
TYPE_NAME        VARCHAR2(200)                    
CREATION_DATE    DATE                             
CREATED_BY       VARCHAR2(200)  Y                
LAST_UPDATE_DATE DATE           Y                 
LAST_UPDATED_BY  VARCHAR2(200)  Y                                    
DISPLAY_NAME     VARCHAR2(200)  Y                                                 
ENABLED          VARCHAR2(1)    Y                    
DESCRIPTION      VARCHAR2(4000) Y  

我使用hibernate获得的结果是:

CREATED_BY        Column length :::255  STRING
CREATION_DATE     Column length :::255  TIMESTAMP
DESCRIPTION       Column length :::255  STRING
DISPLAY_NAME      Column length :::200  STRING
ENABLED           Column length :::255  STRING
LAST_UPDATED_BY   Column length :::255  STRING
LAST_UPDATE_DATE  Column length :::255  TIMESTAMP
TYPE_NAME         Column length :::200  STRING

请建议..

1 个答案:

答案 0 :(得分:1)

通常,Hibernate不关心底层数据库的外观,只要一切都在jdbc级别上正常工作。

获取所需信息的最安全方法是直接查询Oracle字典:

select COLUMN_NAME, DATA_LENGTH from USER_TAB_COLS where table_name = '<TABLE>';

您可以将其作为本机查询执行,或者您可以将(可能是@Immutable)实体映射到USER_TAB_COLS表以使用JPQL / HQL和EntityManager / Session API。