Hibernate过滤或删除子对象

时间:2017-08-22 14:40:24

标签: java hibernate jpa

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;

}

由于

1 个答案:

答案 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]);
    }

通过这样做,您将只获得所需的子对象而不是所有子对象。

由于