簡體   English   中英

Select 非實體與 JPA?

[英]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是否可以使用本機查詢檢索非實體類的實例?

號機查詢只能返回實體(如果你告訴他們通過將這樣做resultClassresultSetMappingcreateNativeQuery方法;如果你不這樣做,你會得到原始數據的集合)。

在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);
}

比照。 https://www.programmerall.com/article/89371766511/

我想我找到了解決方案。 有一種方法可以在構造查詢時使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM