【发布时间】:2012-01-03 23:02:13
【问题描述】:
我有两个简单的映射:
<class name="org.testing.Person" table="PERSON">
<id name="personId" type="long" column="PERSON_ID">
<generator class="native"/>
</id>
<property name="personName" type="string" not-null="true" column="PERSON_NAME"/>
<many-to-one name="personAddress" class="org.testing.Address" column="PERSON_ADDRESS" not-null="true" cascade="all" unique="true"/>
</class>
和
<class name="org.testing.Address" table="ADDRESS">
<id name="addressId" type="long" column="ADDRESS_ID">
<generator class="native" />
</id>
<property name="street" column="ADDRESS_STREET" type="string" />
<property name="city" column="ADDRESS_CITY" type="string" />
<property name="state" column="ADDRESS_STATE" type="string" />
</class>
我尝试像这样获取人员地址的属性:
session.createCriteria(Person.class)
.add(Restrictions.eq("personName", "Frodo"))
.createAlias("personAddress", "pa")
.setProjection(Projections.property("pa.street"))
.list();
它有效。 比这样:
session.createCriteria(Person.class)
.add(Restrictions.eq("personName", "Frodo"))
.createCriteria("personAddress")
.setProjection(Projections.property("street"))
.list();
它抛出:org.hibernate.QueryException: could not resolve property: street of: org.testing.Person。我认为两者都应该给出相同的结果。我哪里错了?
提前致谢!
【问题讨论】:
-
为什么在第二个查询中使用 createCriteria("personAddress")?
-
我正在使用它,因为在 Person 类中有一个名为 personAddress 的属性,它是与 Address 关联的一端 类
标签: java hibernate associations criteria alias