2016-09-06 92 views
-1

我有一個用hibernate 4管理的posgresql數據庫,我想知道是否有辦法生成來自數據庫內容的java對象實體。生成java內容實體

如果我有一個Hibernate對象的測試:

Test ( 
int id, 
String aString, 
String anotherString 
) 

在我的表測試數據庫:

ID,AString,AnotherString 
1,uuuu,iiii 
2,vvvv,xxxx 

我在尋找產生類似結果的方法:

Test test1 = new Test(1,"uuuu","iiii"); 
Test test2 = new Test(2,"vvvv","xxxx"); 

回答

0

是的,這是可能的使用hql,

對於這一點,你必須做的是

1)在您的測試類作爲

public Test(int id, String aString, String anotherString){ 
     this.id=id; 
     this.aString=aString; 
     this.anotherString =anotherString ; 

}

2)在拿使用HQL寫數據創建一個構造函數: 選擇新的測試(entityAlias.id,entityAlias.aString,entityAlias.anotherString)來自EntityName entityAlias;

在內省的情況下 1)創建一個構造函數,其中參數的順序是在我們的類中寫入的order od字段。

2)使用反射手動準備查詢。

我寫了一個測試程序下面的查詢創建參考: -

public static void main(String[] args) { 
     Class<Test> aClass = Test.class; 
     Field[] fieldArray = null; 
     String alias ="test"; 
     int length=0; 
     try { 
     fieldArray = aClass.getFields(); 
     length= fieldArray.length; 
     } catch (SecurityException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     StringBuilder s=new StringBuilder("select new Test("); 
     for(int index=0; index<length ;index++){ 
      s.append(alias+ "." +fieldArray[index].getName()); 
      if(index != length -1){ 
       s.append(" , "); 
      } 
      else{ 
       s.append(") "); 
      } 
     } 
     s.append(" FROM Test " + alias); 
     System.out.println(s); 
    } 

輸出: 選擇新的測試(test.id,test.aString,test.anotherString)測試從測試

+0

謝謝爲了您的迴應。有沒有辦法通過自省來做到這一點? – djschorn

+0

您是否想先內省測試類的字段,然後在查詢中獲取相應的字段? 如果你喜歡答案請upvote。 –

+0

是的。我正在尋找一種自動的方式來做到這一點。因爲在提出的解決方案中,我必須手動執行查詢創建操作。謝謝 – djschorn