Hibernate查询多次给出相同的记录

时间:2012-05-12 15:02:47

标签: java hibernate

我正在eclipse中处理hibernate。我正在执行简单的'From'查询。这是代码

  List list = sess1.createQuery("From Myview").list();
    System.out.println("Records Found :"+list.size());

    Iterator<Myview> i = list.iterator();

    while(i.hasNext())
    {
        Myview nS = i.next();
        System.out.println(nS.getFirstName()+" -- "+nS.getLastName()+" -- "+nS.getAddressLine1());
    }

问题是list.size()返回11,这是正确的,因为我的表中有11条记录。 但是当我在while循环中时,相同的记录显示多次,并且循环在第11次迭代后终止。这是我的输出

enter image description here

这就是我想要的

enter image description here

现在您可以看到,在我的输出中,记录显示11次,但同一记录会一次又一次地重复。我需要的是后面图像中显示的输出。

请在这方面帮助我,因为我是hibernate的新手

6 个答案:

答案 0 :(得分:22)

当您的hbm文件中的id元素不是数据库表中的PK时,会发生这种情况。 Hibernate将所有具有相同ID的行视为同一对象。

将id元素更改为指向PK列,或者使用composite-id元素,以防表中只有复合主键。

答案 1 :(得分:0)

您确定表格填写正确吗? 试试:

List list = sess1.createQuery("SELECT * FROM Myview").list();

此外,您从视图中获取此列表?你确定你正确地看了这个观点吗?

答案 2 :(得分:0)

您应该使用distinct关键字来过滤相同的结果。

答案 3 :(得分:0)

您的实体Myview必须实现java.io.Serializable接口

答案 4 :(得分:0)

如果您在映射中有关联,请检查是否fetch=FetchType.EAGER。如果是,则使用其他获取类型或fetchMode。

答案 5 :(得分:0)

将Hibernate返回的对象放到LinkedHashSet并返回LinkedHashSet。