hibernate OneToMany标准返回重复项
我有一个由以下映射的关联:
@Entity public class Parent { ... @Id @Column(name = "parent_id") private Long id; @OneToMany(mappedBy = "parent") @OrderBy("id") private List children; ... } @Entity public class Child { ... @Id @Column(name = "child_id") private Long id; @ManyToOne @NotFound(action = NotFoundAction.IGNORE) @JoinColumn(name = "parent_id") private Parent parent; @Column private Boolean enabled; ... }
我想使用Criteria API返回包含一个或多个具有属性enabled=false
子实体的所有Parent
实体的列表。 我不希望查询过滤映射的子集合。
例如,给出以下内容:
Parent A - Child A enabled=true - Child B enabled=false Parent B - Child A enabled=false - Child B enabled=false Parent C - Child A enabled=true - Child B enabled=true
该查询应返回以下内容:
Parent A - Child A enabled=true - Child B enabled=false Parent B - Child A enabled=false - Child B enabled=false
到目前为止,我使用以下Criteria查询:
Criteria crit = session.createCriteria(Parent.class); crit.createCriteria("children").add(Restrictions.eq("enabled", false)); List result = crit.list(); return result;
然而,它返回相当于
Parent A - Child A enabled=true - Child B enabled=false Parent B - Child A enabled=false - Child B enabled=false Parent B - Child A enabled=false - Child B enabled=false
即,它为每个子元素返回单个父记录(填充子集合),其中enabled=false
有谁知道如何在这种情况下只返回唯一的父元素?
建议表示赞赏,p。
你需要添加一个distinct
,例如
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
应该适合你的情况
- HibernateDaoSupport在hibernate 4.0中
- org.hibernate.HibernateException:找不到/hibernate.cfg.xml
- 我可以使用带有beanvalidation的hibernate实体注释吗?
- 如果我在Hibernate中使用JPA,我的项目应该具有哪些依赖项?
- HSQLDB和Hibernate / JPA – 没有持久化到磁盘?
- Java 9,Hibernate和java.sql / javax.transaction
- 在什么条件下我们需要在数据库中使用复合键
- Hibernate MSSQL datetime2映射
- java.lang.NoClassDefFoundError:设置了org / hibernate / Session hibernate jars