1. 程式人生 > >hibernate 對映無主鍵的資料庫表

hibernate 對映無主鍵的資料庫表

做東西發現數據庫查出來的資料是重複資料,如果有3條記錄就重複第一條記錄3次,後來發現是表無主鍵,且hibernate對映檔案必須有id屬性,搜了搜發現要使用符合主鍵的方法.................以下轉載自一個帖子裡內容:

MyEclipse自動生成的那個貌似比較複雜 會多用一個聯合主鍵的POJO類 我寫了一個相對簡單的 只需要對映的POJO就OK了 希望有幫助
比如 我MySQL中有一個表定義如下 沒有定義主鍵

CREATE TABLE `test`.`NoId`(`name` VARCHAR(45),`age` INTEGER)ENGINE = InnoDB;


那麼對應的POJO寫成

public class NoId implements Serializable {
	private String name = null;
	private Long age = null;
 
	// 構造子和getter setter
	......
 
	// 注意這種情況下 我們需要重寫equals和hashCode
	public boolean equals(Object object) {
		......
	}
 
	public int hashCode() {
		......
	}
}


然後對應的對映檔案如下

<hibernate-mapping>
	<class
name="fox.math.kmust.NoId" table="noid" lazy="true"> <!-- 這裡是將表的所有屬性作為聯合主鍵 --> <composite-id> <key-property name="name"/> <key-property name="age"/> </composite-id> </class> </hibernate-mapping>

*****************總結下來就是hibernate使用聯合主鍵操作無主鍵表*************************

使用複合主鍵時,發生classcastException異常,原因複合主鍵類沒有被序列化。


如上,進行序列化就可以了:

public class NoId implements Serializable {