【发布时间】:2012-06-03 19:56:34
【问题描述】:
我有以下代码:
Session session = (Session) em.getDelegate();
Criteria c = session.createCriteria(Term.class);
c.setProjection(
Projections.projectionList()
.add(Projections.property("id"))
.add(Projections.property("qualifier"))
.add(Projections.property("preferred"))
.add(Projections.property("terminology.definition"))
);
c.list();
但是 Hibernate 在 terminology.definition 上阻塞了一个例外
org.hibernate.QueryException:无法解析属性:terminology.definition of:net.*.Term
尽管Term中有一个属性:
@OneToOne(mappedBy = "term")
public Terminology getTerminology() { return terminology; }
并且Terminology 有一个名为definition 的@Basic 属性。我可以用一个看起来很愚蠢的别名来解决它:
session.createCriteria(Term.class).createAlias("terminology", "terminology")
但这是不可取的。
【问题讨论】:
-
您需要看起来很愚蠢的别名,因为 hibernate 使用它来加入您的表格。 Projections 就像查询的 select 子句,因此您只需在代码中说将术语属性投影到您的实体 Term 中作为属性
标签: java hibernate hibernate-criteria