He una asociación asignada por el siguiente texto:hibernar OneToMany criterios vuelve duplicados
@Entity
public class Parent
{
...
@Id
@Column(name = "parent_id")
private Long id;
@OneToMany(mappedBy = "parent")
@OrderBy("id")
private List<Child> 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;
...
}
me gustaría utilizar la API Criterios para devolver una lista de todos los Parent
entidades que contienen uno o más Child
entidades con el atributo enabled=false
. No me gustaría que la colección mapeada children
sea filtrada por la consulta.
Por ejemplo, dada la siguiente:
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
la consulta debe devolver el siguiente:
Parent A
- Child A enabled=true
- Child B enabled=false
Parent B
- Child A enabled=false
- Child B enabled=false
Hasta el momento estoy usando los siguientes criterios de búsqueda:
Criteria crit = session.createCriteria(Parent.class);
crit.createCriteria("children").add(Restrictions.eq("enabled", false));
List<Parent> result = crit.list();
return result;
Sin embargo está devolviendo el equivalente de
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
Es decir, se está volviendo un único registro padre (con la colección de los niños poblada) para cada elemento secundario con enabled=false
¿Alguien sabe cómo sólo para regresar elementos primarios únicos en este escenario?
Asesoramiento apreciado, p.