2011-11-10 18 views
0

我是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); 

回答

3

哇。你有兩件事是錯的。

  1. 如果該字段應該包含代碼,讓它保存一個代碼,而不是名稱。像這樣處理你的領域將導致不可讀和不可維護的代碼。如果getCode()返回名稱,getName()返回地址,getAddress()返回電話號碼,那麼你和你的同事將很快失去所有的頭髮。

  2. 一個聯繫人不應該有customerCode類型String。它應該有一個類型爲Customer的字段customer,其中Customer是代表客戶的Hibernate實體。這被稱爲關聯。如果客戶有多個聯繫人,則它是一個ManyToOne關聯。如果它只有一個,它是一個OneToOne關聯。這樣,爲了獲得客戶的姓名,您只需使用contact.getCustomer().getName()

您應該閱讀Hibernate reference manual

備註:不尊重Java naming conventions會使您的代碼難以閱讀。類名必須以大寫字母開頭,變量和方法以小寫字母開頭。它們都不應該包含下劃線(例如:ContactPersistence,jobTitle)

+0

謝謝你回答JB! 1.)我認爲如果你說第一點的時候你有什麼問題,因爲這是我完成它的方式,getCode返回代碼並且getName返回名稱等。我只想**顯示**名稱而不是碼。 2.)我相信這應該解決,非常感謝。我會閱讀並嘗試關聯。感謝參考手冊鏈接。 – kanishk

+0

至於命名約定,我知道它在這裏是錯誤的,但我認爲表示列的變量應該與數據庫中的列名完全相同,這就是我爲什麼這樣寫的原因。沒有必要嗎? – kanishk

+0

嗨JB,我讀了關於關聯,但我無法弄清楚如何修改我的contactDetails列表(我在jsp中用於顯示錶中的詳細信息)以包含一列客戶名稱而不是客戶代碼。我在contactPersistence類中包含了多對一的註釋,並且還使用getter和setter創建了一個customerPersistence類對象。但是,我仍然會如何訪問jsp中的客戶名稱....請指教..我真的很堅強。 – kanishk

相關問題