epd*_*mer 1 sql jpa jpql spring-data-jpa
是否可以在JPA中指定自定义连接条件(jpql或通过条件api?
select .. from .. join ... on (... <custom criteria> )
Run Code Online (Sandbox Code Playgroud)
我需要这个的原因是因为我想在日期范围内加入一组表(一个是具有事实堆叠的历史表)
**更新**
可以在JPA(2.1>)中指定其他连接条件/条件.见接受的答案(zxcf).
Hibernate注意:虽然可以使用JOIN .. ON或使用javax.persistence.criteria.JOIN编程式指定其他连接条件,但是不能使用引用不同表的条件,只能引用同一个表的条件(和支持不高于层次结构)请参阅:https://hibernate.atlassian.net/browse/HHH-7321
您不能使用JOIN关键字,除非您在两个实体之间有明确的关系 - 如果您有关系,您可以使用:
SELECT e FROM Employee e JOIN e.projects p
Run Code Online (Sandbox Code Playgroud)
您还可以JOIN使用ON关键字缩小范围(请注意,这适用于JPA 2.1):
SELECT e FROM Employee e JOIN e.projects p ON p.name LIKE 'As%'
Run Code Online (Sandbox Code Playgroud)
如果要定义JOIN哪个连接两个没有定义关系的实体,则应在WHERE子句中使用其他条件:
SELECT e FROM Employee e, Projects p WHERE e.projectId = p.id
Run Code Online (Sandbox Code Playgroud)
更新
如果您EclipseLink在版本2.4或更高版本中使用(或它是您的JPA提供程序),则可以使用自定义条件in JOIN .. ON子句,因为EclipseLink还支持在两个根级别对象之间使用ON子句.
SELECT e FROM Employee e LEFT JOIN MailingAddress a ON e.address = a.address
Run Code Online (Sandbox Code Playgroud)