【问题标题】:Hibernate query gives same record multiple timesHibernate 查询多次给出相同的记录
【发布时间】:2012-05-12 15:02:46
【问题描述】:

我正在研究 Eclipse 中的休眠。我正在执行简单的“来自”查询。这是代码

  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 次迭代后终止。这是我的输出

这就是我想要的

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

请在这方面帮助我,因为我是休眠新手

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

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

    将您的 id 元素更改为指向 PK 列或使用复合 id 元素以防您的表只有复合主键。

    【讨论】:

      【解决方案2】:

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

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

      此外,您是从视图中获取此列表吗?你确定这个视图是正确的吗?

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            把Hibernate返回的对象放到一个LinkedHashSet中,返回LinkedHashSet。

            【讨论】:

              【解决方案6】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-05-13
                • 1970-01-01
                相关资源
                最近更新 更多