简体   繁体   English

在休眠状态下访问组件属性

[英]access a component property in hibernate

I have three classes Student.java 我有三个班Student.java

public class Student {
    long id;
    String name;
    Address address;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Address getAddress() {
        return address;
    }
    public void setAddress(Address address) {
        this.address = address;
    }
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
}

Address.java 地址.java

public class Address {
    String houseNumber;
    String addrLine1;
    String addrLine2;
    String phone;

    public String getHouseNumber() {
        return houseNumber;
    }
    public void setHouseNumber(String houseNumber) {
        this.houseNumber = houseNumber;
    }
    public String getAddrLine1() {
        return addrLine1;
    }
    public void setAddrLine1(String addrLine1) {
        this.addrLine1 = addrLine1;
    }
    public String getAddrLine2() {
        return addrLine2;
    }
    public void setAddrLine2(String addrLine2) {
        this.addrLine2 = addrLine2;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
}

Hibernate Mapping for Student.hbm.xml Student.hbm.xml Student.hbm.xml的休眠映射Student.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Student" table="STUDENT">
<id name="id" type="long" column="ID"/>
  <property name="name" column="NAME"/>
  <component name="address" class="Address">
    <property name="houseNumber" column="HOUSE_NUMBER" not-null="true"/>
    <property name="addrLine1" column="ADDRLINE1"/>
    <property name="addrLine2" column="ADDRLINE2"/>
    <property name="phone" column="PHONE"/>
  </component>
</component>
</class>
</hibernate-mapping>

Now I want to access the property houseNumber, phone using detached criteria but when I try to get the property as address.phone 现在我想使用分离的条件访问属性houseNumber,电话,但是当我尝试将属性作为address.phone时
I get the errors as 我得到的错误
org.hibernate.QueryException: could not resolve property: phone of: Student org.hibernate.QueryException:无法解析属性:电话:学生

The error occurs because Student really does not have the "phone", which is a Address property. 发生错误是因为Student确实没有“电话”,它是一个Address属性。

The correct usage should be something like session.createCriteria( Student.class ).add( Restrictions.eq( "address.phone", "myPhoneNumber" ) ).list() for common criterias. 正确的用法应类似于session.createCriteria( Student.class ).add( Restrictions.eq( "address.phone", "myPhoneNumber" ) ).list()的通用条件。

The version with DetachedCriteria is DetachedCriteria的版本是

DetachedCriteria criteria = DetachedCriteria.forClass( Student.class ).add(Restrictions.eq( "address.phone", "99999999" ) );
List students = criteria.getExecutableCriteria( session ).list();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM