我有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;
   ...
}

如何查询所有具有空Entity1entity2对象?

因为如果我这样做:
SELECT e FROM Entity1 e WHERE e.entity2 IS NULL

JPA引擎在两个表之间进行JOIN并放置了无用的WHERE子句(WHERE entity_id = NULL)。继续执行无用的 native SQL。
怎么能

当前解决方案:

阅读OpenJPA文档后,我发现应使用 native 查询来解决JPA限制。使用 native 查询可以很容易地完成它,而我目前正在这样做,但我想避免使用它。

最佳答案

您可以简单地运行以下JPQL查询:

SELECT e1
FROM Entity1 e1
LEFT JOIN e1.entity2 e2
WHERE e2 IS NULL
LEFT JOIN是您想要的。

关于java - 使用JPA查询可为空的@OneToOne关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30630642/

10-09 00:50