如何在Criteria API(JPA)中获取单列的不同值

问题描述:

嗨,我是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()。

请试试这个选项,如 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

结果提到的是不是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