首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Hibernate 3查询多对一属性

使用Hibernate 3查询多对一属性
EN

Stack Overflow用户
提问于 2015-03-26 21:43:44
回答 2查看 57关注 0票数 0

Java / Hibernate-3我有一个名为“票证”的对象,它与"Person“有一个多对一的关联。这被映射为:

代码语言:javascript
复制
<class name="Ticket"> 
   ...
   <many-to-one name="person" class="Person" ...>
   ...
</class>

我想查询票,并将结果限制在Person上的属性上。我想列出所有有assigned_to = 'ADMIN' or person.role = 'ADMIN'的票。我原以为能做这样的事:

代码语言:javascript
复制
        query.add(
            Expression.or(
                Expression.eq("assigned_to", "ADMIN"),
                Expression.eq("person.role", "ADMIN")
            )
        );

但是我得到了一个错误:could not resolve property: person.role of: model.Ticket

如何查询Ticket,限制基于Ticket.Person.role的结果

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-26 21:58:31

您需要首先为第二个表创建一个别名:

代码语言:javascript
复制
List tickets = sess.createCriteria(Ticket.class)
    .createAlias("person", "p")
    .add( Restrictions.eqProperty("p.role", "ADMIN") )
    .list();

通过设置别名,您可以引用第二个表。如果没有显式设置别名,Hibernate将创建自己的别名。而且您的eq("person.role","ADMIN")没有正确使用这个别名,所以您有一个无效的查询。通过自己显式设置别名,您可以知道别名,并可以正确引用它。

票数 2
EN

Stack Overflow用户

发布于 2015-03-26 21:50:43

在Hibernate 3.2手册的15.4。标准查询-关联中,您可以很容易地使用标准API来完成这一任务。关键是您需要为票证->Person关联定义另一个条件,然后将筛选器应用于此。或者,按照该链接定义别名。

很难给出一个代码示例,因为您的原始示例非常简短,没有太多的上下文。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29289462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档