使用非主列作为条件的Hibernate关联

时间:2015-01-14 09:36:26

标签: hibernate hibernate-mapping

我想要一个只读集合关系,它由与非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过滤器。

1 个答案:

答案 0 :(得分:1)

JoinColumn有一个referencedColumnName属性,允许设置...引用的列名(在这种情况下为alias)。

Hibernate有一个Where注释,允许使用SQL指定一个集合元素必须验证的条件(即status > 4