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>

 

 

-------------------------------------以上转帖自:http://bbs.chinajavaworld.com/thread.jspa?threadID=751068

 

 

*****************总结下来就是hibernate使用联合主键操作无主键表*************************

 

 

 

使用复合主键时,发生classcastException异常,原因复合主键类没有被序列化。


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

 

public class NoId implements Serializable {

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值