属于等级制度

时间:2013-10-18 08:09:14

标签: hibernate java-ee jpa tree hierarchy

我有一个代表产品类别树的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相关的产品?

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

谢谢

0 个答案:

没有答案