如何在休眠状态下仅从表和联接表中的多对多关系中获取数据

时间:2018-11-08 11:36:41

标签: hibernate hibernate-mapping hibernate-criteria

enter image description here

如上图所示,我在股票和类别之间有许多相似的关系。因此,我们有一个名为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;

....

Category.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(加入表)来获取数据?我不想参加第三张桌子。由于我没有联接表的实体,因此我也被迫联接第三张表,这在我们的项目中导致性能问题。我们正在使用休眠标准。但是我已经尝试过使用spring数据jpa,本机查询,hql等执行相同的操作,但是无法实现。

2)我可以只从联接表即stock_category中获取数据,而不必联接任何其他表吗?

0 个答案:

没有答案