2017-11-14 4 views
0

Ich habe einen Controller vom Restdienst, den ich eine Hibernate-Methode nenne, um das Ergebnis zu erhalten, aber ich weiß wirklich nicht, warum die Kinderkomponenten nicht gekommen sind. Wenn ich diese Methode mit Junit aufrufen, funktioniert es. Dies ist der Code:Das Elternteil ruft nicht die Hiberntnate des Kindes ab JPA

{ 

@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

Haben Sie sicherstellen Sie überprüft nicht die Kinder laziily Laden? –

+0

Wickeln Sie die @Transaction (readOnly = true) in den Dienst sollte ermöglichen, dass der träge Laden Kind träge zugegriffen wird. –

Antwort

1

standardmäßig @OneToMany träge geladen werden. Sie sollten @OneToMany( mappedBy = "product", fetch=FetchType.Eager) verwenden Eager zu tun holen

+0

Dies ruft immer untergeordnete Objekte ab, auch wenn Sie nur das übergeordnete Element möchten. –

0

Sie definitiv

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

verwenden können, jedoch hat dies einen Nachteil. Sie werden immer Kinder holen, auch wenn Sie nur die Parent und seine wenigen Eigenschaften wollen.

Verwenden Sie JOIN FETCH in Ihrem @Query, wenn Sie JpaRepositories verwenden.

Sehen Sie sich die folgenden verwandten Fragen

Verwandte Themen