实现 SQL 查询作为两个多对一关系的 JPA 条件

Implementing SQL query as JPA Criteria for two Many-To-One relationships

我正在尝试为以下场景构建 JPA 标准。我有以下 3 个实体 class,其中两个与 UniqueType 有 @ManyToOne 关系,但 UniqueType 与任何其他 class 没有明确关系: 结构如下:

-------------           -----------            ------------ 
   event         N:1    unique_type     1:N       detail
-------------           -----------            ------------
event_id (PK)           type_code (PK)         detail_id (PK)
type_code (FK)                                 type_code (FK)
                                               abbreviation

SQL查询成功选择了按缩写筛选的事件记录:

SELECT
  event.event_id,
  event.type_code,
  detail.abbreviation
FROM
  event 
  JOIN unique_type ON event.type_code = unique_type.type_code
  JOIN detail ON detail.type_code = unique_type.type_code
WHERE detail.abbreviation = 'ABC'

我将事件 class 作为我的根,但是当我加入 UniqueType class 时,我卡住了,因为与 UniqueType

上的 Detail 没有明确的关系
Join<Event, UniqueType> joinToUniqueType = root.join(Event_.typeCode);
Join<UniqueType, ???>

我希望能够搜索类似这样的缩写:

predicates.add(builder.lower(joinToDetail.get(Detail_.abbreviation)),'ABC');

条件怎么写?非常感谢任何帮助。

由于您需要内部连接语义,您可以使用交叉连接代替,数据库无论如何都会对其进行优化。使用以下

Root<Detail> event = query.from(Event.class);
Root<Detail> detail = query.from(Detail.class);

predicates.add(builder.eq(detail.get(Detail_.typeCode), event.get(Event_.typeCode));
predicates.add(builder.lower(detail.get(Detail_.abbreviation)),'ABC');