2017-10-07 199 views
1

嗨,我是JPA & Criteria API的新成員。 我想獲取不同值的單列(試圖獲得不同的TestId值)。我有我的數據庫中的表下面。如何在Criteria API(JPA)中獲取單列的不同值

__________________________________ 
|TestId(Pk) | TestCol(PK) | TestEx| 
__________________________________ 

我有以下類 模型類

@Data 
@Entity 
@Table(schema = "TEST", name = "TEST_TYPE") 
public class Test { 
    @EmbeddedId 
    private TestPK id; 

    @Column(nmae = "TestEX") 
    private double testEx 
} 

@Data 
@Embeddable 
public class TestPK { 
    @Column(name = "TestId") 
    private String testId; 

    @Column(name="TestCol") 
    private String testcol 
} 

庫類

public class TestRepoImpl { 

    @PersistenceContext 
    EntityManager em; 

    @Override 
    public List<Test> getData() { 
     CriteriaBuilder cb = em.getCriteriaBuilder(); 
     CriteriaQuery<Test> cq = cb.createQuery(Test.class); 
     Root<Test> root = cq.from(Test.class); 

     // cq.get(Test_.id).get(TestPK_.testId); 
     // cq.select(root); 
     cq.multiselect(root.get(Test_.id).get(TestPK_.testId)); 
     cq.distinct(true); 
     // List<Tuple> ts = em.createQuery(cq).getResultList(); 
     List<Test> data = em.createQuery(cq).getResultList(); 
     return data; 
    } 
} 

我得到下面的錯誤。

部分對象查詢不允許維護緩存或編輯。 您必須使用dontMaintainCache()。

回答

0

請試試這個選項,如 here((org.eclipse.persistence.jpa.JpaQuery)query).getDatabaseQuery().dontMaintainCache();

+0

當他使用Hibernate?因爲他把它放在問題標題和標籤中 – DN1

+0

org.eclipse.persistence.internal.jpa.querydef.CriteriaQueryImpl無法轉換爲org.eclipse.persistence.jpa.JpaQuery ...嘗試解決方案時出現此錯誤。 – PKS

0

結果提到的是不是TestString列表,private String testId;

更改

CriteriaQuery<Test> cq = cb.createQuery(Test.class);

CriteriaQuery<String> cq = cb.createQuery(String.class);

和代碼的其餘部分相應可能的幫助。

+0

: - 我必須返回測試對象,如果我走你的解決方案,我會得到。 類型不匹配:無法將列表轉換爲列表錯誤。 – PKS

+0

請再考慮一下你在做什麼,並編輯你的問題更加精確。你需要'TestID'的不同值,但結果應該是'Test'。例如,如果有兩個'Test'具有相同的'TestPK.testId',你可能需要聚合或者選擇一個'Test's。 – pirho

相關問題