我有一个代表产品类别树的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产品的页面。 因此,我必须将产品直接包含在“Fruit”下,将产品包含在“Orange”下。
“prodotti”列表仅包含与该单个Gusto直接相关的产品。
如何在查询中包含与后代Gustos相关的产品?
我想过有一个遍历树的方法,并将所有找到的产品添加到返回列表中。有没有办法用单个查询或其他技术检索它们?
谢谢