![](/img/trans.png)
[英]JPA/HIBERNATE: How can Query return Non- Entities Objects or List of Objects with inner non-Entities objects?
[英]Select non-entities with JPA?
JPA 是否可以通過本機查詢檢索非實體類的實例?
我有一個包裝兩個實體的非實體 class:
class Wrap{
Entity1 ent1;
Entity2 ent2
}
@Entity
class Entity1{
...
}
@Entity
class Entity2{
...
}
我怎么能做那樣的事情?
Query q = entityManager.createNativeQuery("native select here");
List<Wrap> list = q.getResultList();
JPA是否可以使用本機查詢檢索非實體類的實例?
號機查詢只能返回實體(如果你告訴他們通過將這樣做resultClass
或resultSetMapping
到createNativeQuery
方法;如果你不這樣做,你會得到原始數據的集合)。
在JPQL中,您可以使用非實體構造函數的構造函數表達式(SELECT NEW ...)。 但是本機查詢不支持此功能,您必須手動執行此操作。
JPA 沒有實體的本機查詢 - 特別是復雜查詢(遞歸、多重連接等)?
這對我有用,但它是特定於 hibernate 的:
import org.hibernate.transform.Transformers;
Query query = entityManagerFactory.createEntityManager().createNativeQuery(SQL);
// Transform the results to MAP <Key, Value>
query.unwrap(org.hibernate.SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
query.setParameter("myNamedParam", myParam);
List<Map<String, Object>> list = query.getResultList();
for (Map<String, Object> map : list) {
System.out.println(map);
}
我想我找到了解決方案。 有一種方法可以在構造查詢時使用NEW關鍵字。 我做了什么來解決這個問題:
public List<ProductType> getProductByName(String productName) {
String sqlQuery = "select DISTINCT **NEW** project1.ProductType(o.name, o.revision) from Lhproduct o where o.name = :prodname";
Query qry = getEntityManager().**createQuery(sqlQuery);**
qry.setParameter("prodname",productName);
return qry.getResultList();
}
ProductType是一個非實體對象,一個實現Serialiabale的簡單普通對象。 但是您需要定義適當的構造函數。
快樂的編碼:-)
謝謝和問候,哈里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.