【问题标题】:With JPA Mapped Entities with one-to-many relationships, how can I add join criterias使用具有一对多关系的 JPA 映射实体,如何添加连接条件
【发布时间】:2018-11-20 05:22:04
【问题描述】:

鉴于情况:数据库是在 Hibernate 尚未诞生时创建的,我们在这里谈论真正的遗产。 我的表从未删除过记录,只需在行上设置一个 active 标志以将条目标记为当前正在使用。查询通常如下所示:

SELECT * from A left join B on A.id = B.a_id and B.active = 1

在Java中定义了实体A和B,并且A有一个属性

@OneToMany
private Set<B> b; 

如何注释属性以添加条件“and B.active=1”?

首选 JPA 解决方案,但如有必要,我们也可以使用休眠注释。

以类似的方式,我们遇到条目具有有效日期范围的情况,因此我们必须添加类似于

的条件
"and B.active_From >= now() and (B.active_to is null or B.active_to < now())"

【问题讨论】:

标签: hibernate jpa


【解决方案1】:

您可以使用 Hibernate 的 @Where 注释从关联中过滤元素。您可以在Hibernate Tip 中找到示例和说明。

这是它的简短版本:

您可以将 SQL sn-p 设置为 @Where 注释的 clause 属性的值。因此,您的映射应如下所示:

@OneToMany
@Where(clause = "active = 1")
private Set<B> b; 

而且你可以用同样的方法来排除那些不在时间范围内的

@OneToMany
@Where(clause = "active_from >= now() and (active_to is null or active_to < now())")
private Set<B> b; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-01
    • 2018-04-29
    • 1970-01-01
    • 2018-01-13
    • 2015-07-02
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多