20

我正在研究 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 次,但同一记录一次又一次地重复。我需要的是后面图像中显示的输出。

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

4

6 回答 6

32

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

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

于 2013-04-30T08:31:18.730 回答
0

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

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

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

于 2012-05-12T16:16:53.603 回答
0

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

于 2012-05-12T16:17:05.683 回答
0

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

于 2014-01-15T08:39:44.697 回答
0

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

于 2017-05-29T10:13:50.307 回答
-1

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

于 2015-01-08T19:27:19.670 回答