我有一个代表产品类别树的 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 关联的产品?
我想过有一个方法遍历树并将找到的所有产品添加到返回列表中。有没有办法通过单个查询或其他技术来检索它们?
谢谢