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 是“水果”(母亲对象)和其他产品“在”“橙色”Gusto。

我正在建立一个必须显示所有 Fruit 产品的页面。所以我必须同时包含“水果”下的产品和“橙色”下的产品。

“prodotti”列表确实只包含与该单一 Gusto 直接相关的产品。

如何在查询中包含与后代 Gustos 关联的产品?

我想过有一个方法遍历树并将找到的所有产品添加到返回列表中。有没有办法通过单个查询或其他技术来检索它们?

谢谢

4

0 回答 0