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

标签 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;
   ...
}

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

因为如果我这样做:

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/

相关文章:

java - 将单行 XML 解析为 HashMap

java - 将非标准化数据集设置为嵌套文档

用于在 grails 中插入的 Sql 查询

mysql - Spring 与 hibernate Post 不工作

hibernate - QueryBuilder 中的 Lucene 条件 AND

java - Spring MVC 和 JUnit : Failed to load ApplicationContext

java - 从 db2 blob 字段检索 p7m 文件

java - 试图从广播接收器开始一个 Activity

php - php寻呼机代码中检索sql查询错误

具有 200 个变量的 Java POJO 设计