首页 > 解决方案 > 如何在休眠中仅从表和连接表中的多对多关系中获取数据

问题描述

在此处输入图像描述

如上图所示,我在库存和类别之间有类似的多对多关系。因此我们有一个名为 stock_category 的连接表。

实体如下:

public class Stock implements java.io.Serializable {
@Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "STOCK_ID")
    private Integer stockId;


@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "stock_category", joinColumns = { 
            @JoinColumn(name = "STOCK_ID", nullable = false, updatable = false) }, 
            inverseJoinColumns = { @JoinColumn(name = "CATEGORY_ID", 
                    nullable = false, updatable = false) })
private Set<Category> categories;

....

类别.java:

@Entity
@Table(name = "category")
public class Category implements java.io.Serializable {


@Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "CATEGORY_ID")
private Integer categoryId;


@ManyToMany(fetch = FetchType.LAZY, mappedBy = "categories")
private Set<Stock> stocks ;

............

所以基本上在我们的项目中,我们有两个实体,它们以多对多关系(大多数时候是双向的)相互关联。另外,我没有连接表的实体。

我的问题:

1) 我如何只通过加入 stock 和 stock_category(join table) 来获取数据?我不想加入第三张桌子。由于我没有连接表的实体,因此我也被迫加入第三个表,这导致我们的项目出现性能问题。我们正在使用休眠标准。但我尝试过使用 spring data jpa、native query、hql 等做同样的事情,但无法实现。

2) 我是否可以仅从联接表(即 stock_category)中获取数据而不加入任何其他表?

标签: hibernatehibernate-mappinghibernate-criteria

解决方案


推荐阅读