有没有人知道Hibernate的Criteria.list()
和Query.list()
方法返回同一实体的多次出现的有效性?
有时,我在使用Criteria API时发现,更改类映射定义中的默认获取策略(从"select“更改为"join")有时会影响list()
的结果输出中可以出现多少对同一实体的引用,我不确定是否将其视为错误。javadoc并没有定义它,它只是说“匹配的查询结果列表”。(谢谢你们)。
如果这是预期的和正常的行为,那么我可以自己去重复列表,这不是问题,但如果这是一个bug,那么我宁愿避免它,而不是去去重复结果并试图忽略它。
有谁有这方面的经验吗?
发布于 2009-10-13 13:34:03
是的,如果你构造你的查询,那么获取重复项是完全可能的。有关示例Hibernate CollectionOfElements EAGER fetch duplicates elements,请参阅
发布于 2016-08-27 00:14:57
当我的Java API开始增长时,我也开始注意到它的行为。很高兴有一个简单的方法来防止它。出于练习,我开始添加:
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
我的所有返回列表的条件。例如:
List<PaymentTypeAccountEntity> paymentTypeAccounts = criteria()
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
.list();
发布于 2010-04-14 08:18:59
如果您有一个对象,其中包含一个子对象列表,并且您的条件将这两个表连接在一起,则可能会得到主对象的副本。
确保不会得到重复数据的一种方法是使用DistinctRootEntityResultTransformer。这样做的主要缺点是如果您使用的是结果集缓冲/行计数。这两者不能一起工作。
https://stackoverflow.com/questions/1560239
复制相似问题