我的表格中有两行
select count(*) from PREFERENCE;
COUNT(*)
----------
2
当我做的时候
session.createQuery("from Preference").list();
我有两个对象。
但是,当我这样做时
session.createCriteria(Preference.class).list();
我得到三个对象 - 第一行重复。
为什么会发生这种情况?
答案 0 :(得分:1)
EAGER fetch associations are applied for:
- 进行检索
通过get()或load()
在导航关联时隐式发生的检索
条件查询
如果使用了子选择提取,则HQL查询
我假设你的Preference实体中有一个EAGER @OneToMany集合。
HQL覆盖了默认的提取计划,因此忽略了EAGET @OneToMany关联,该关联将被表示为未初始化的LAZY代理。
Criteria查询将选择配置文件,对于每个配置文件,您的@OneToMany集合中有两个子项,因此除非您使用不同的结果,否则您将获得指向同一实体的两个父行。
如果您需要不同的结果,则必须将Criteria查询更改为:
session
.createCriteria(Preference.class)
.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
.list();