2016-03-15 56 views
1

从休眠中检索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 

我使用休眠得到的结果是:

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 

请咨询..

+0

在您的映射中定义了哪些长度值? – vanje

+0

@vanje在我的映射中没有定义长度列。是否需要这样做?从休眠状态检索长度? –

+0

不,这不是必需的。但是,如果在定义长度时有任何区别,那将会很有趣。 – vanje

回答

1

一般,只要所有东西在jdbc文件上正常工作,Hibernate并不关心底层数据库是怎么样的VEL。

得到你所需要的信息,最安全的办法是直接查询甲骨文字典:

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

您可以执行这个原生查询,也可以在(可能@Immutable)实体映射到USER_TAB_COLS表以利用JPQL/HQL和EntityManager/Session API。