我有2個表,即用戶和聯繫人。 表是這個樣子:在休眠狀態下從多個表中檢索數據
subscriber -> id, contact_id //contact_id is a foreign key
contact -> id, firstName, lastName, email, contactType
我Contact.hbm.xml文件看起來像這樣:
<hibernate-mapping>
<class name="com.DBNAME.model.Contact" table="contact" >
<id name="id" type="int">
<column name="id" />
<generator class="identity" />
</id>
<property name="contactType" type="int">
<column name="contactType" sql-type="TINYINT"></column>
</property>
<property name="firstName" type="string">
<column name="firstName"></column>
</property>
<property name="lastName" type="string">
<column name="lastName"></column>
</property>
</class>
</hibernate-mapping>
而且我Subscriber.hbm.xml文件看起來像這樣:
<hibernate-mapping>
<class name="com.DBNAME.model.Subscriber" table="subscriber" >
<id name="id" type="int">
<column name="id" />
<generator class="identity" />
</id>
<many-to-one name="contact" class="com.DBNAME.model.Contact" column="contact_id" unique="true" fetch="join"/>
</class>
</hibernate-mapping>
現在我想檢索一個簡單的訂閱者對象,其中聯繫人自動映射。因此,我在Java代碼中做的是:
/**
* get Subscribers
*/
@SuppressWarnings("unchecked")
private void getSubscribersWithContactDetails() {
Session session = HibernateUtils.getSessionFactory().getCurrentSession();
session.beginTransaction();
try {
setSubscribers((List<Subscriber>)session.createQuery("from Subscriber").list());
} catch (HibernateException e) {
session.getTransaction().rollback();
} finally {
session.getTransaction().commit();
}
}
/**
* @param subscribers the subscribers to set
*/
public void setSubscribers(List<Subscriber> subscribers) {
this.subscribers = subscribers;
}
我的數據類如下所示:
public class Contact implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private int contactType;
private String firstName;
private String lastName;
// Getters Setters and constructors
}
public class Subscriber implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private Contact contact; //Foreign Key from Contact -> id
private int contactId;
//Constructors, Getters and Setters
}
而且通過Hibernate生成我的查詢看起來是這樣的:
select subscriber0_.id as id1_, subscriber0_.contact_id as contact2_1_ from subscriber subscriber0_
我沒有從聯繫人表中獲取聯繫信息。我將如何做到這一點?
聯繫人對象爲空,聯繫人內部的所有詳細信息都設置爲空。 – Ahmed 2012-04-13 19:43:01
在.hbm文件中使用'lazy = false'。你的情況確實如此,因爲你得到空條目。 一旦你使用這個選項,它將把數據保存在訂閱者中。 – instanceOfObject 2012-04-13 19:54:25