考虑到这种情况:该数据库是在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;
如何注释属性以添加条件“和B.active = 1”?
首选JPA解决方案,但如有必要,我们也可以使用休眠注释。
类似地,在某些情况下,条目具有有效的日期范围,因此我们必须添加类似于
的条件"and B.active_From >= now() and (B.active_to is null or B.active_to < now())"
答案 0 :(得分:1)
您可以使用Hibernate的@Where
注释从关联中过滤元素。您可以在此Hibernate Tip中找到示例和解释。
这是它的简短版本:
您可以将一个SQL代码段设置为clause
批注的@Where
属性的值。因此,您的映射应如下所示:
@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;