1

製品カテゴリのツリーを表す JPA エンティティがあります。

@Entity
@Table(name="gusti")
@NamedQueries({ 
    @NamedQuery(name="selectAll", query="select c from Gusto c left join fetch c.children left join fetch c.parent")
})
public class Gusto implements Serializable {

    private static final long serialVersionUID = 1L;

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

    @NotNull
    private String nome;

    @Lob
    private String descrizione;

    @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
    @JoinColumn(name = "parent_id")
    private List<Gusto> children = new LinkedList<Gusto>();

    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(
        name = "parent_id",
        insertable=false,
        updatable=false
    )
    private Gusto parent;

    @OneToMany(
        mappedBy="gusto",
        cascade=CascadeType.ALL,
        fetch=FetchType.LAZY
    )
    private List<Prodotto> prodotti = new ArrayList<Prodotto>();

// ... 
}

製品エンティティは次のとおりです。

@Entity
@Table(name="prodotti")
public class Prodotto implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    private String nome;

    @Lob
    private String descrizione;

    @ManyToOne
    private Gusto gusto;

// ...
}

私の Gusto のツリーが次のようになっているとします。

Fruit
|_ Blackberry
|_ Orange

Vegetable
|_ Potato

Gusto が "Fruit" (マザー オブジェクト) である製品と、"Orange" Gusto の "下" にある製品があります。

Fruit のすべての製品を表示する必要があるページを作成しています。そのため、「フルーツ」直下の製品と「オレンジ」直下の製品の両方を含める必要があります。

「prodotti」リストには、その 1 つの Gusto に直接関連する製品のみが含まれています。

Gustos の子孫に関連する製品をクエリに含めるにはどうすればよいですか?

ツリーをトラバースし、見つかったすべての製品を返されるリストに追加するメソッドを持つことを考えました。単一のクエリまたは他の手法でそれらを取得する方法はありますか?

ありがとうございました

4

0 に答える 0