2016-03-15 58 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。