程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> hibernate聯合主鍵不便之處(轉),hibernate不便之處

hibernate聯合主鍵不便之處(轉),hibernate不便之處

編輯:C#入門知識

hibernate聯合主鍵不便之處(轉),hibernate不便之處


在使用hibernate的聯合主鍵時有以下幾個需要注意的問題:
1、首先就是映射文件中聯合主鍵的寫法,
例子:  

Java代碼  收藏代碼
  1. <composite-id name="sid" class="cn.test.po.IpAndSubphoneId">  
  2.             <key-property name="ip" type="java.lang.String">  
  3.                 <column name="IP" length="50" />  
  4.             </key-property>  
  5.             <key-property name="subphone" type="java.lang.String">  
  6.                 <column name="SUBPHONE" length="50" />  
  7.             </key-property>  
  8.         </composite-id>  
聯合主鍵當中的<key-property>標簽跟<property>標簽的寫法基本相同,只是需要寫在<composite-id>標簽裡面。

2、聯合主鍵當中的字段不應該存在空值
   在實際的開發當中我發現,如果聯合主鍵中的某一字段為空值,那麼將會導致通過該聯合主鍵查詢出來的結果為空值,這個問題不知道是hibernate的 bug還是spring集成hibernate時產生的問題,總之在實際使用的時候最好保證作為聯合主鍵的字段都是有值的。
3、主鍵容易沖突
   hibernate聯合主鍵的另一個弊端就是存在主鍵重復的隱患,如果將某幾個字段做為聯合主鍵,在這些字段更新之後很可能造成重復,但數據庫中並不會報錯(存在其他不相同的字段),然而hibernate卻會報主鍵重復的錯誤。
4、使用起來麻煩
   有時候只是需要查詢一個字段,但是卻要通過包含N個字段的聯合主鍵來進行查詢,這樣做未免勞民傷財十分的不爽。

   所以在這裡奉勸大家還是少用聯合主鍵為好,避免不必要的麻煩,除非在萬萬不得已的情況下找不到不用聯合主鍵的方法。

本文轉自:http://blog.csdn.net/ystyaoshengting/article/details/7715782


hibernate聯合主鍵問題

我試驗了一下,用主鍵的某一個字段查詢,完全沒有問題,給你個例子,你根據實際情況修改下
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Query q = session.createQuery("from Teacher t where t.pk.name='KKK'");
Teacher t = (Teacher) q.uniqueResult();
System.out.println(t.getPk().getId() + ":" + t.getPk().getName());
session.getTransaction().commit();
 

hibernate 聯合主鍵問題

聯合主鍵2種映射方式,
class Domain implements Serilziable{
private String name;
private String email;

}
映射文件:
<class ...>
<composite-id>
<key-property name="name" />
<key-property name="email" />

</composite-id>

</class>
get和刪除,都是直接用這個對象本身作為id:
Domain id=new Domain();
id.setName("");
id.setEmail("");

Domain domain=(Domain)session.get(Domain.class,id);

Domain id=new Domain();
id.setName("");
id.setEmail("");
session.delete(id);

第二種component composite id的方式,可以看看我個人說明裡面關於hibernate的資料,有復合主鍵的詳細介紹。希望對你有用。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved