做东西发现数据库查出来的数据是重复数据,如果有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 {