java - Hibernate 标准 aPI 多选

标签 java hibernate postgresql-9.2 java-ee-7 jpa-2.1

如果我使用 Hibernate Criteria API,例如:

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery criteriaQuery = criteriaBuilder.createQuery();
Root<OneEntity> entityOneRoot = criteriaQuery.from(OneEntity.class);
Root<TwoEntity> entityTwoRoot = criteriaQuery.from(TwoEntity.class);
criteriaQuery.multiselect(OneEntity, TwoEntity);

我是否需要使用 EQUAL 限制(如 SQL 中的 ON 限制)来使两个表(实体)之间的 ID 相等?因为两个表的笛卡尔积?

criteriaQuery.where(criteriaBuilder.equal(OneEntity.get("fk_id"), TwoEntity.get("id")));

我的意思是...在使用 join 的 SQL 中,我们需要使用 on-clausule,例如:

select * from table_1 t1, table_2 t2 where t1.t2_id=t2.t1_id;

但我在 API Criteria 中找不到有关它的信息。

最佳答案

来自 JPA 2.1 规范,章节 4.4.5 连接:

An inner join may be implicitly specified by the use of a cartesian product in the FROM clause and a join condition in the WHERE clause. In the absence of a join condition, this reduces to the cartesian product.

The main use case for this generalized style of join is when a join condition does not involve a foreign key relationship that is mapped to an entity relationship.

Example:

SELECT c FROM Customer c, Employee e WHERE c.hatsize = e.shoesize

In general, use of this style of inner join (also referred to as theta-join) is less typical than explicitly defined joins over relationships.

由于 JPQL 的工作方式与 Criteria API 相同,因此您的查询中需要同样的限制。

关于java - Hibernate 标准 aPI 多选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30033415/

相关文章:

java - 序列化 EMF 模型实例的最佳方法是什么?

java - 如何在 CollapsingToolbarLayout 内设置 Toolbar 的重力?

java - 我可以从 Spring Data Couchbase Repository 中的查询方法名称派生 ARRAY_CONTAINS 吗?

json - Spring Roo OneToMany 关系未在 JSON 中显示

postgresql - 使用 PostGIS 获取基于位置的数据

sql - 如果值存在于多个类别中,如何分隔分组

sql - 如何使用新的 PostgreSQL JSON 数据类型中的字段进行查询?

java - 在 Android 中通过 TCP 发送时文件被损坏

java - 服务器重启后如何将 HazelcastClient 重新连接到 HazelcastServer

java - 如何在hibernate中不添加引用@Entity的情况下触发外键关系?