Hibernate的list()方法出来的结果重复

来源:互联网 发布:剑三苍云脸型数据 编辑:程序博客网 时间:2024/06/06 20:25

按顺序查错:

一、将hql转化为sql,在数据库中执行。查看是否出现重复

如为重复结果,则说明hql没有问题

若重复结果,则说明hql有问题。则需要重写hql

二、是否存在list()转化后的List集合是不重复的,但你遍历输出的时候,未正确遍历导致每次遍历第一条而出现重复。

解决办法:写个List集合,装入值。测试下遍历输出的东西是否重复。

三、主键问题(新手容易犯的问题)

但查询的表的主键不是由一个字段组成,而是由多个字段组成,即联合主键。此时的实体类未进行配置。不管是使用xml方式还是注解方式,没有进行处理。则结果出来的是重复的。即便你数据库进行了联合主键设置,也是不行的。下面贴出注解方式进行联合主键的配置:

在使用Annotation使用联合主键有三种方式:

1.  将你的多个Primary Key放置一个新类中(主键类),并且用注解@Embeddable 声明主键类即可;实体类使用注解@Id指向主键类

2.  将你的多个Primary Key放置一个新类中(主键类),实体类使用注解@EmbeddedId指向主键类即可;

3. 实体类中在所有需要设置为主键的属性上都加入@Id注解,然后在注解实体类下面添加一个如下注解:

@IdClass(value=XXX.class)    这里的XXX对应你的主键类名

3种之中最适合的书写习惯的是第3种,但是第二种比较方便,也很常用;

但是不管哪一种使用方法,对于使用联合主键而言,你的主键类都需要使用Serializable接口,重写equals和hashCode函数;

      Serializable接口 原因是:序列化就是为了能暂存一些对象到硬盘中;

     重写equals函数 , 原因是:内存中的对象区分;

     重写hashCode  函数, 原因是:根据哈希码快速索引;




原创粉丝点击