Hibernate过滤与标准条件不匹配的子对象
我面临一个关于删除子对象的问题。
我在子对象上应用过滤器,我只想要那个对象,但它会使所有对象变胖。如下请见 示例
因为我在Dogs名字上用黄色应用了过滤器。所以我只想要狗的黄色物体。但是当我在那种情况下使用父对象p.getDogs()进行迭代时。它将给出该关系船的所有列表。我想要Dogs对象列表,其名称只是'Yellow'
public class TestClass {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Test");
createDatabaseDate(emf);
EntityManager em = emf.createEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Person> cq = cb.createQuery(Person.class);
Root<Person> root = cq.from(Person.class);
cq.select(root);
Path<String> name = root.join("dogs").get("name");
cq.where(cb.and(cb.equal(name, "Yellow")));
TypedQuery<Person> query = em.createQuery(cq);
for(Person p : query.getResultList()){
for(Dog dog : p.getDogs()){
System.out.println(dog.getName());
}
}
System.out.println(query.getResultList());
emf.close();
}
}
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String name;
private String nickName;
private Integer age;
@OneToMany(mappedBy = "person", cascade = CascadeType.ALL)
private List<Dog> dogs;
}
由于
答案 0 :(得分:0)
我已经完成了所有解决方案,但我找不到有关标准条件的解决方案。对于替代解决方案,我编写了jpa查询,然后迭代该结果的对象。 请找到我的解决方案如下。
String hql ="select p.id, p.name,d.name from Person p join fetch p.dogs d where d.name = :name ";
Query query = em.createQuery(hql);
query.setParameter("name", "Yellow");
List<Object[]> resultList = query.getResultList();
for (Object[] obj : resultList) {
System.out.println((Integer)obj[0]);
System.out.println((String)obj[1]);
System.out.println((String)obj[2]);
}
通过这样做,您将只获得所需的子对象而不是所有子对象。
由于