我有一个来自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;
}
}
答案 0 :(得分:1)
默认情况下,@OneToMany
会懒惰加载。
您应该使用@OneToMany( mappedBy = "product", fetch=FetchType.Eager )
进行Eager fetch
答案 1 :(得分:0)
你绝对可以使用
@OneToMany(mappedBy = "product", fetch=FetchType.Eager)
然而这有不利之处。即使您只想要父及其少数属性,您也总是会抓取孩子。
如果您使用的是JpaRepositories,请在JOIN FETCH
中使用@Query
。
查看以下相关问题