我想要一个只读集合关系,它由与非pk值匹配的对象组成。
以下示例表可以说明我的观点:
User:
id<pk>
username
alias
Collection logs (all Log entries with log.useralias=alias and log.status>4)
Log:
id<pk>
status
useralias
message
注意:这只是一个示例,请不要评论此示例的用途。
我需要这个作为关系的原因是性能:我无法对每个用户的日志执行查询,我需要一个初始化所有数据的查询。
额外问题:可以从HQL查询初始化此关系,而不是将其表达为关系吗? 类似于:
from User u
left join fetch Log l into u.logs
where l.useralias=u.alias and l.status>4
编辑: 请注意,这与Cat示例不同:
from Cat as cat
left join cat.kittens as kitten
with kitten.bodyWeight > 10.0
在这种情况下,从Cat到Kittens的关系是一个foregn key-&gt;主键关系,这将使生活更加简单。在我的问题中,我没有外键,只有非pk过滤器。
答案 0 :(得分:1)
JoinColumn有一个referencedColumnName
属性,允许设置...引用的列名(在这种情况下为alias
)。
Hibernate有一个Where注释,允许使用SQL指定一个集合元素必须验证的条件(即status > 4
)