java - 将 JPA Criteria Builder 与表连接结合使用

标签 java hibernate jpa

我正在尝试使用 JPA Criteria Builder 连接两个表:CountryGeotarget。 等效的 SQL

Select distinct Country.* from Country Inner Join Geotarget
 where Geotarget.Country_ID = Country.ID;

我的代码是

     CriteriaBuilder criteriaBuilder getTransactionalEntityManager().getCriteriaBuilder();
    CriteriaQuery<Country> criteriaQuery = criteriaBuilder.createQuery(Country.class);
    Root<Country> root = criteriaQuery.from(Country.class);
    Join<Geotarget, Country> geotargetJoin = root.join(Geotarget_.country, JoinType.INNER);
    Predicate predicate = criteriaBuilder.equal(Country_.id,Geotarget_.country);
    criteriaQuery = criteriaQuery.where(predicate);
    criteriaQuery.select(Country.class).distinct(true);
    return findAllObjects(criteriaQuery);

但这是错误的,它甚至没有在某些地方进行解析。特别是我似乎找不到连接线或等于原因的代码,因为它似乎不喜欢比较两个字段。 你能用正确的代码帮助我吗?

最佳答案

我认为您不需要谓词。连接本身应执行 GeoTarget.Country_ID = Country.ID。因此修改为:

CriteriaBuilder criteriaBuilder getTransactionalEntityManager().getCriteriaBuilder();
CriteriaQuery<Country> criteriaQuery = criteriaBuilder.createQuery(Country.class);
Root<Country> root = criteriaQuery.from(Country.class);
Join<Geotarget, Country> geotargetJoin = root.join(Geotarget_.country); // Default is inner
criteriaQuery.select(Country.class).distinct(true);
return findAllObjects(criteriaQuery);

关于java - 将 JPA Criteria Builder 与表连接结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14339401/

相关文章:

hibernate - 在合并值中执行@Formula

Java Spring Hibernate,运行时是否可选地执行映射?

java - 具有相同 PrimaryKey 和foreignKey 的 OneToOne

hibernate - JPA规范是否允许引用非主键列?

java - Spring data JPA exists By Field在MySQL中不区分大小写,如何让它区分大小写

java - HttpURLConnection 到 php 但没有 mysql post?

java - JFileChooser 不显示单个文件

java - Java 运行时环境检测到 fatal error ::当 Eclipse IDE 与 Arduino 交互时

java - Weblogic 12 与 java 7 不会在 JAXBElement 中设置 null

java - 具有抽象泛型和集合的 JPA 单表继承