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

如何在具有枚举字段的实体上使用 JPA CriteriaQuery 填充 DTO 类字符串字段?

Java /JPA |具有指定继承类型的查询

如何在运行时检索 JPA 中实体的映射表名称?