使用JPA查询可以为空的@OneToOne关系

Joh*_*ler 6 java sql hibernate jpa jpql

我有Entity1Entity2.他们有一个OneToOne可以为空的关系.

@Entity
class Entity1 {

   @Id
   @Column(name = "id")
   private Long id;

   @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "entity2")
   @JoinColumn(nullable = true)    
   private Entity2 entity2;
   ...
}
Run Code Online (Sandbox Code Playgroud)

如何查询所有Entity1具有null的对象entity2

因为如果我这样做:

SELECT e FROM Entity1 e WHERE e.entity2 IS NULL
Run Code Online (Sandbox Code Playgroud)

JPA引擎在两个表之间执行JOIN并放入一个无用的WHERE clausule(WHERE entity_id = NULL).恢复,它执行一个无用的本机SQL.怎么能

当前解决方案

阅读OpenJPA文档,我发现应该使用Native Queries来解决JPA限制.我可以使用本机查询非常容易,我目前正在这样做,但我想避免使用它.

Vla*_*cea 5

您只需运行此JPQL查询:

SELECT e1 
FROM Entity1 e1 
LEFT JOIN e1.entity2 e2
WHERE e2 IS NULL
Run Code Online (Sandbox Code Playgroud)

LEFT JOIN就是你要找的东西.