我是hibernate框架的新手,我正在構建一個非常簡單的結構。更改從數據庫中提取的列的值,然後在休眠狀態下在jsp上顯示它
場景:
我有2個表,說A和B在A A列是一個外鍵和B. 主要關鍵現在我想改變這種特定列的表A的價值到表B中另一列的對應值......只是爲了在JSP中顯示而不是實際上在db本身。
我想這樣做是因爲在表A中我有一個代碼,在表B中我有相應的值,我想顯示值而不是代碼。
我該如何做到這一點? (也許加入?)
這裏是我當前的代碼:
休眠連接:
public class HibernateConnection {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
return new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
類在其中執行查詢:
public class contactQuery {
public List<contactPersistence> list(String whereClause){
Session session = HibernateConnection.getSessionFactory().getCurrentSession();
session.beginTransaction();
List<contactPersistence> contactList = null;
try {
contactList = (List<contactPersistence>) session.createQuery(" from contactPersistence " + whereClause).list();
session.getTransaction().commit();
} catch (HibernateException e) {
System.out.println(e.getMessage());
session.getTransaction().rollback();
}
return contactList;
}
}
Persistence類:
@Entity
@Table(name="Contacts")
public class contactPersistence implements Serializable{
private static final long serialVersionUID = -8767337896773261247L;
private String Contact_Code;
private String Name;
private String Customer_Code;
//other columns//
@Id
@GeneratedValue
@Column (name="Job_Title")
public String getJob_Title() {
return Job_Title;
}
public void setJob_Title(String Job_Title) {
this.Job_Title = Job_Title;
}
....
....
//other columns defined similarly
....
....
}
H此前我想用另一個表中的客戶名稱替換customer_code。 我試着改變持久性類中的值(在列的setter方法中),但是通過更新命令改變了db本身的值。這不是我想要的。
任何建議是值得歡迎的。
我已經提供了我認爲足夠的信息,如果不是,請評論。
編輯:
這是我在哪裏顯示數據的JSP:
<s:iterator value="contactDetail" var="contactTable">
<tr>
<td><s:property value="Name"/></td>
<td><s:property value="Job_Title"/></td>
<td><s:property value="Email"/></td>
<td><s:property value="Phone"/></td>
<td><s:property value="Mobile"/></td>
<td><s:property value="Fax"/></td>
<td><s:property value="Address"/></td>
<td><s:property value="Notes"/></td>
</tr>
</s:iterator>
contactDetail和contactTable來自於動作類:
private List<contactPersistence> contactDetail;
public List<contactPersistence> getContactDetail() {
return contactDetail;
}
public void setContactDetail(List<contactPersistence> contactDetail) {
this.contactDetail = contactDetail;
}
private String contactTable;
public String getContactTable() {
return contactTable;
}
public void setContactTable(String contactTable) {
this.contactTable = contactTable;
}
private contactQuery contactQuery;
///////////////////contact detail is populated here//////////
this.contactDetail=contactQuery.list(deWhereClause);
謝謝你回答JB! 1.)我認爲如果你說第一點的時候你有什麼問題,因爲這是我完成它的方式,getCode返回代碼並且getName返回名稱等。我只想**顯示**名稱而不是碼。 2.)我相信這應該解決,非常感謝。我會閱讀並嘗試關聯。感謝參考手冊鏈接。 – kanishk
至於命名約定,我知道它在這裏是錯誤的,但我認爲表示列的變量應該與數據庫中的列名完全相同,這就是我爲什麼這樣寫的原因。沒有必要嗎? – kanishk
嗨JB,我讀了關於關聯,但我無法弄清楚如何修改我的contactDetails列表(我在jsp中用於顯示錶中的詳細信息)以包含一列客戶名稱而不是客戶代碼。我在contactPersistence類中包含了多對一的註釋,並且還使用getter和setter創建了一個customerPersistence類對象。但是,我仍然會如何訪問jsp中的客戶名稱....請指教..我真的很堅強。 – kanishk