我在使用延迟加载的 PrimeFaces (3.2) 数据表时遇到问题,数据是使用 Hibernate (3.6) 从 MySQL 数据库加载的。
问题是我在数据表中得到了重复的结果。我对此做了很多研究,主要问题是使用“EAGER”-加载 OneToMany/ManyToOne/... 关系。我的实体有 5 个多对一和 1 个单对一关系。
结果是使用 DAO 加载的,应该返回 2 行。数据表按以下顺序显示 4 行:
- 结果 1
- 结果 2
- 结果 1
- 结果 2
count(*) 查询返回正确的行数 (2)。
直接使用当 hibernate 的“show_sql”开关设置为 true 时记录的 SQL 查询,它正确返回了 2 行。
虽然起初其中一些关系是预先加载的,但我将它们全部更改为延迟加载,但没有成功。我调试了正确返回 2 行的 DAO 方法。然后将数据加载到 primefaces 数据表中并在某处复制。
然后我使用另一个用户帐户尝试了相同的操作,发现没有重复的行。
然后我从数据库中删除了相关实体的所有记录,但没有成功。
我真的不知道这里可能有什么问题。我什至消除了所有的 ManyToOne/... 关系,并将外键直接映射为整数值,以避免任何连接并且没有任何改变。
我不知道代码的哪些部分可能对您有所帮助,但如果需要,我可以与您分享。
提前感谢您的帮助!
[编辑] 使用结果转换器并将实体映射到 Set 而不是 List 也无济于事,数据库因此休眠总是返回正确的行数,但在 DAO 和数据表。
[编辑 2] 经过更多调查,我意识到这只发生在分页的 pageSize 设置为 15 时(有 3 个可能的值可供选择:5、10 和 15)。
当设置为 10 时,一切都按预期工作。我真的不明白这有什么问题,因为具有不同实体的相同代码在另一个页面上工作。