如上图所示,我在股票和类别之间有许多相似的关系。因此,我们有一个名为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中获取数据,而不必联接任何其他表吗?