天天看點

jpa 原生sql 查詢傳回一個實體_JPA EntityManager 在沒有實體類的情況下傳回Map

JPA entityManager.createNativeQuery()執行原生的SQL,當我們查詢結果沒有對應的實體類時,query.getResultList()傳回的是一個List,也就是說每行的資料被作為一個對象數組傳回。常見的用法是這樣的:

1 public void testNativeQuery(){

Query query = entityManager.createNativeQuery("select id, code,name from table1 ");

List rows = query.getResultList();

for (Object[] row : rows) {

System.out.println("id = " + row[0]+";code = " + row[1]+";name= " + row[2]);

}

}

這樣的傳回值常常讓我們不知道其對應關系,尤其是在執行select *的過程中。

其實很多JPA的底層實作都是支援傳回Map對象的。

在實際應用過程中我們可以這樣實作:

1.Hibernate :

1 public void testNativeQuery() {

Query q = entityManager.createNativeQuery("select * from table1");

// 将結果轉化為 Map

q.unwrap(org.hibernate.SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);

List> list = q.getResultList();

for (Map m : list) {

System.out.println(m);

}

}

2.OpenJPA

1 public void testNativeQuery() {

EntityManager entityManager = SpringUtil.getBean(EntityManager.class);

Query q = entityManager.createNativeQuery("select * from table1");

QueryImpl impl = q.unwrap(QueryImpl.class);

impl.setResultTransformer(Map.class);

List list = q.getResultList();

for (Map m : list) {

System.out.println(m);

}

}

3.最簡單的方法

1 public void testNativeQuery() {

EntityManager entityManager = SpringUtil.getBean(EntityManager.class);

Query q = entityManager.createNativeQuery("select * from table1",java.util.Map.class);

List> list = q.getResultList();

for (Map m : list) {

System.out.println(m);

}

}

jpa 原生sql 查詢傳回一個實體_JPA EntityManager 在沒有實體類的情況下傳回Map

關于找一找教程網

本站文章僅代表作者觀點,不代表本站立場,所有文章非營利性免費分享。

本站提供了軟體程式設計、網站開發技術、伺服器運維、人工智能等等IT技術文章,希望廣大程式員努力學習,讓我們用科技改變世界。

[JPA EntityManager 在沒有實體類的情況下傳回Map]http://www.zyiz.net/tech/detail-136931.html