父母没有检索孩子hibertnate JPA

时间:2017-11-14 17:42:56

标签: java hibernate rest jpa

我有一个来自rest服务的Controller,我称之为Hibernate方法来获取结果,但我真的不知道为什么子组件没有来。当我使用Junit调用此方法时,它可以工作。 这是代码:

{

@Entity
public class Product implements Serializable {
    private static final long serialVersionUID = -6131311050358241535L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(nullable = false)
    private String name;

    private String description;


    @OneToMany(mappedBy = "product")
    private List<Image> images = new ArrayList<Image>();
}


{

@Entity
public class Image implements Serializable {

    private static final long serialVersionUID = 2128787860415180858L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @JoinColumn(name = "product_id")
    @ManyToOne
    private Product product;

    private ImageType type;
}
{

@PersistenceContext
private EntityManager entityManager;

public List<Product> findAllWithParentProductsAndImage() {
String hpql = "select distinct p from Product p left join fetch p.images";
List<Product> resultList = entityManager.createQuery(hpql, 
        Product.class).getResultList();
return resultList;
}
}

2 个答案:

答案 0 :(得分:1)

默认情况下,@OneToMany会懒惰加载。 您应该使用@OneToMany( mappedBy = "product", fetch=FetchType.Eager )进行Eager fetch

答案 1 :(得分:0)

你绝对可以使用

@OneToMany(mappedBy = "product", fetch=FetchType.Eager)

然而这有不利之处。即使您只想要及其少数属性,您也总是会抓取孩子。

如果您使用的是JpaRepositories,请在JOIN FETCH中使用@Query

查看以下相关问题