JPA Annotations - 如何检索具有特定列值的所有实体
Posted
技术标签:
【中文标题】JPA Annotations - 如何检索具有特定列值的所有实体【英文标题】:JPA Annotations - How to retrieve all entities with a specific column value 【发布时间】:2019-03-22 01:14:33 【问题描述】:假设我有一个与 Order 有“OneToMany”关系的实体对象 Customer。我希望当“客户”被加载时,只有 ID = 1234, 5678 的订单被加载。
有什么想法吗?
@Entity
@Table(name = "Customer")
public class Customer extends TraceableJPA
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "customer_id")
private Long id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "Customer", targetEntity = Order.class)
@Column(name = "order_id", value = "1234","5678" (?))
@OrderBy("isrtdate ASC")
@BatchSize(size = 20)
private List<Order> orders = new ArrayList<Order>();
【问题讨论】:
你不能那样做。如果Customer
有一些订单符合您的过滤条件,而有一些订单不符合...那么运气不好,您将得到与Customer
相关的所有内容。 @Column
注释的 javadocs 清楚地说明了它允许什么以及它的用途。
我不是要求使用@Column。这只是一个例子。随意建议另一个@...它只是希望能够过滤此变量的包含,只要准确知道结帐的订单即可。
“你不能那样做”。真的无法得到更明确的结论......
【参考方案1】:
休眠
如果你使用 hibernate Session 及其 abilites ,你总是可以使用 @FilterJoinTable 机制。
查看THIS 文章了解更多信息。
但它不是全局的,你必须预定义这个过滤器,然后显式配置 Session 对象来使用它。
JPA
JPA 在其标准中没有这样的功能,用于全局关系过滤。
您始终可以在查询中对其进行过滤:)
【讨论】:
以上是关于JPA Annotations - 如何检索具有特定列值的所有实体的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate Annotations/JPA 映射集合
是否可以使用 Hibernate 或 JPA Annotations 限制 @OneToMany 集合的大小?
为没有 Hibernate Annotations 的 PostgreSQL 文本类型更正 JPA Annotation