2017-02-10 105 views
2

你好,我需要遷移從JDBC我的DAO的類來JPA,但我需要的是不需要修改代碼PreparedStatement/while(rs.next()){....}rs.getInt("NAME_COLUMN") OR rs.getString("NAME_COLUMN")遷移JDBC結果到JPA List對象

餘下時間的很容易遷移......我只需要結果集變量...

JDBC代碼

PreparedStatement ps = connection.prepareStatement("SELECT f1, f2 FROM table"); 
ResultSet rs = ps.executeQuery(); 
while (rs.next()) { 

    System.out.println(rs.getInt("f1")); 
    System.out.println(rs.getString("f2")); 
    // More than 800 of this... 
} 

JPA代碼

EntityManager em = PersistenceUtil.getEntityManager(); 

Query q = em.createNativeQuery("SELECT f1, f2 FROM table"); 
List<Object[]> results = q.getResultList(); 

for (Object[] rs : results) { 
    System.out.println(rs[0]); // need to be rs.getInt("f1") 
    System.out.println(rs[1]); // need to be rs.getString("f2") 
}   

我有很多的ResultSet在我的項目超過800個

我需要一個方法/類/東西只有結果集的變量(內部的),如果我在rs[0]我寫遷移將花費大量工作來重寫JPA中的所有結果。

+1

你有很多請求表?或者您在實際查詢中經常使用相同的表格? – davidxxx

+0

我有很多請求的表格,以及很多結果集,... – sealabr

+4

如果你有很多這個,那麼爲什麼還要打擾JPA?另外,在應用程序中使用JPA並不意味着您必須在任何地方使用它? –

回答

1

這裏的答案

EntityManager em = PersistenceUtil.getEntityManager(); 

    Query q = em.createNativeQuery("SELECT f1, f2 FROM table"); 
    q.setHint(QueryHints.RESULT_TYPE, ResultType.Map); 
    List<Map> lm = q.getResultList(); 

     for (Map rs : lm) { 

      System.out.println(rs.get("f1")); // add some function convert to Int 
      System.out.println(rs.get("f2")); // add some function convert to string 


     } 

有誰知道任何函數轉換字符串和詮釋?

like:getInt or getString?