使用非主列作为标准的 Hibernate 关联
Hibernate association using non-primary columns as criteria
我想要一个由匹配非 pk 值的对象组成的只读集合关系。
下面的例子table可以说明我的观点:
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 的关系是外键-> 主键关系,这将使生活变得更加简单。在我的问题中,我没有外键,只有非 pk 过滤器。
JoinColumn 有一个 referencedColumnName
属性,允许设置...引用的列名(即 alias
,在这种情况下)。
Hibernate 有一个 Where 注释允许指定一个条件,使用 SQL,集合的元素必须验证(即 status > 4
)
我想要一个由匹配非 pk 值的对象组成的只读集合关系。
下面的例子table可以说明我的观点:
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 的关系是外键-> 主键关系,这将使生活变得更加简单。在我的问题中,我没有外键,只有非 pk 过滤器。
JoinColumn 有一个 referencedColumnName
属性,允许设置...引用的列名(即 alias
,在这种情况下)。
Hibernate 有一个 Where 注释允许指定一个条件,使用 SQL,集合的元素必须验证(即 status > 4
)