2014-02-25 100 views
0

我有三個類 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; 
    } 
} 

Hibernate映射爲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> 

現在我想訪問屬性houseNumber,手機使用分離標準 但是當我試圖讓財產address.phone
我得到的錯誤,
org.hibernate.QueryException:無法解析屬性:手機的:學生

回答

0

錯誤發生,因爲學生確實不有「電話」,這是一個地址屬性。

對於常見的標準,正確的用法應該是類似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(); 
+0

的標準是getHibernateTemplate()findByCriteria。(DetachableCriteria(CriteriaImpl(com.Student:這裏[次標準(地址:)] [電話= 99999999]))) – Krishna

+0

回答更新DetachedCriteria版本。我用hibernate 3.6.7和4.2.7測試了它。 – Willian

+0

DetachedCriteria的版本是hibernate 3.2.0 – Krishna