Hibernate 对于具有一对多关系的JPA映射实体,如何添加连接标准

Hibernate 对于具有一对多关系的JPA映射实体,如何添加连接标准,hibernate,jpa,Hibernate,Jpa,鉴于这种情况:数据库是在Hibernate还没有诞生时创建的,我们在这里讨论真正的遗留问题。 我有一些从未删除过记录的表,只是在行上设置一个活动标志,将一个条目标记为当前正在使用。查询通常如下所示: 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; @OneToMany 私有集b; 如何注释属性以添

鉴于这种情况:数据库是在Hibernate还没有诞生时创建的,我们在这里讨论真正的遗留问题。 我有一些从未删除过记录的表,只是在行上设置一个活动标志,将一个条目标记为当前正在使用。查询通常如下所示:

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; 
@OneToMany
私有集b;
如何注释属性以添加条件“and B.active=1”

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

以类似的方式,我们有一些条目具有活动日期范围的情况,因此我们必须添加一个类似于

"and B.active_From >= now() and (B.active_to is null or B.active_to < now())"
“和B.active\u From>=now()和(B.active\u to为null或B.active\u to
您可以使用Hibernate的
@Where
注释从关联中筛选元素。你可以在这里找到一个例子和解释

以下是它的简短版本:

您可以将SQL代码段设置为
@Where
注释的
子句
属性的值。因此,您的映射应该如下所示:

@OneToMany
@Where(clause = "active = 1")
private Set<B> b; 
@OneToMany
@其中(子句=“活动=1”)
私有集b;
您可以使用相同的方法排除不在时间范围内的

@OneToMany
@Where(clause = "active_from >= now() and (active_to is null or active_to < now())")
private Set<B> b; 
@OneToMany
@其中(子句=“active\u from>=now()和(active\u to为null或active\u to
您可以使用Hibernate的
@Where
注释从关联中筛选元素。你可以在这里找到一个例子和解释

以下是它的简短版本:

您可以将SQL代码段设置为
@Where
注释的
子句
属性的值。因此,您的映射应该如下所示:

@OneToMany
@Where(clause = "active = 1")
private Set<B> b; 
@OneToMany
@其中(子句=“活动=1”)
私有集b;
您可以使用相同的方法排除不在时间范围内的

@OneToMany
@Where(clause = "active_from >= now() and (active_to is null or active_to < now())")
private Set<B> b; 
@OneToMany
@其中(子句=“active\u from>=now()和(active\u to为null或active\u to
您是否将Spring框架与JPA结合使用?Hibernate特定的解决方案是这里唯一的选择。请参阅
@中的段落,其中
位于此处:。Hibernate也提供了动态过滤器,但是
@其中的
似乎就是您要寻找的。您是否将Spring框架与JPA结合使用?Hibernate特定的解决方案是这里唯一的选择。请参阅
@中的段落,其中
位于此处:。Hibernate也提供了动态过滤器,但是
@其中的
似乎就是您要寻找的。