JPA - 如何在多对一关系中检查条件

Posted

技术标签:

【中文标题】JPA - 如何在多对一关系中检查条件【英文标题】:JPA - How to check a conditional before in a ManyToOneRelationship 【发布时间】:2022-01-23 20:52:03 【问题描述】:

我有 2 个实体,CarPerson。一个人可以有多辆车。所以我有

@Entity
@NoArgsConstructor
@Getter
@Table(name="Car")
public class Car 
  @Id
  private String id;

  private String name;
  
  @ManyToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "person_id")
  private Person person;


@Entity
@NoArgsConstructor
@Getter
@Table(name="Person")
public class Person 
  @Id
  private String id;

  private String name;
  
  private String address;

但是,我只想加载车主设置了地址的汽车(因此它不为空)。

我已经尝试添加

@Where(clause = "address IS NOT NULL")

但无济于事。

要将其转换为 SQL 术语,我需要将查询 SELECT * FROM car c JOIN person p ON c.person_id = p.id WHERE p.address IS NOT NULL

【问题讨论】:

【参考方案1】:

你必须使用查询

select c from Car c where c.person.address is not null

@Where 注释(顺便说一句。这是 Hibernate 专有的,而不是 JPA 注释)用于集合过滤内容。

【讨论】:

以上是关于JPA - 如何在多对一关系中检查条件的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 EntityType 在与同一实体(父)的多对一关系中显示当前对象?

django - 从多对一关系中获取对象集

HQL 检索多对一关系中不同实体的列表

在多对一中使用 Spring Data JPA 保持错误关系

Django models 多对一关系中 on_delete 参数的设置

如何在多对多关系上使用休眠和 JPA 删除孤立实体?