Java / Hibernate-3我有一个名为“票证”的对象,它与"Person“有一个多对一的关联。这被映射为:
<class name="Ticket">
...
<many-to-one name="person" class="Person" ...>
...
</class>我想查询票,并将结果限制在Person上的属性上。我想列出所有有assigned_to = 'ADMIN' or person.role = 'ADMIN'的票。我原以为能做这样的事:
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的结果
发布于 2015-03-26 21:58:31
您需要首先为第二个表创建一个别名:
List tickets = sess.createCriteria(Ticket.class)
.createAlias("person", "p")
.add( Restrictions.eqProperty("p.role", "ADMIN") )
.list();通过设置别名,您可以引用第二个表。如果没有显式设置别名,Hibernate将创建自己的别名。而且您的eq("person.role","ADMIN")没有正确使用这个别名,所以您有一个无效的查询。通过自己显式设置别名,您可以知道别名,并可以正确引用它。
发布于 2015-03-26 21:50:43
在Hibernate 3.2手册的15.4。标准查询-关联中,您可以很容易地使用标准API来完成这一任务。关键是您需要为票证->Person关联定义另一个条件,然后将筛选器应用于此。或者,按照该链接定义别名。
很难给出一个代码示例,因为您的原始示例非常简短,没有太多的上下文。
https://stackoverflow.com/questions/29289462
复制相似问题