Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在hibernate中访问组件属性_Java_Hibernate_Hibernate Mapping_Hibernate Criteria - Fatal编程技术网

Java 在hibernate中访问组件属性

Java 在hibernate中访问组件属性,java,hibernate,hibernate-mapping,hibernate-criteria,Java,Hibernate,Hibernate Mapping,Hibernate Criteria,我有三节课 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 getAddres

我有三节课 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

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;
    }
}
Student.hbm.xml的Hibernate映射 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>

现在,我想使用分离的标准访问酒店门牌号和电话 但是当我尝试获取属性作为地址时。电话
我得到的错误为

org.hibernate.QueryException:无法解析属性:phone of:Student

发生错误的原因是Student确实没有“phone”,这是一个地址属性

正确的用法应该类似于
session.createCriteria(Student.class).add(Restrictions.eq(“address.phone”,“myPhoneNumber”)).list()
,用于常见标准

具有DetachedCriteria的版本为

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

标准是getHibernateTemplate()。findByCriteria(DetachableCriteria(CriteriaImpl(com.Student:this[Subcriteria(address:)][phone=9999999]))回答已用DetachedCriteria版本更新。我用hibernate 3.6.7和4.2.7对其进行了测试。DetachedCriteria是hibernate 3.2.0版本。对于我来说,上述版本甚至可以与hibernate 3.2.0一起使用。你试过了吗?是否有相同的错误消息?