【问题标题】:Hibernate multiple @ManyToMany associations to the same entity休眠多个@ManyToMany 关联到同一个实体
【发布时间】:2021-04-07 08:27:32
【问题描述】:

我有以下场景:

我有一个名为MyOtherEntity 的实体,它有一个类型属性。 MyEntity 仅与基于 MyOtherEntity 类型的某些 MyOtherEntity 实体相关联。

MyEntity 类(仅用于演示,未正确建模):

@Data
@Entity
@Table(name = "my_table")
public class MyEntity {

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(
        name = "my_entity_my_other_entity_type1",
        joinColumns = {@JoinColumn(name = "my_entity_id")},
        inverseJoinColumns = {@JoinColumn(name = "my_other_entity_id")}
    )
    private List<MyOtherEntity> myOtherEntityType1;

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(
        name = "my_entity_my_other_entity_type2",
        joinColumns = {@JoinColumn(name = "my_entity_id")},
        inverseJoinColumns = {@JoinColumn(name = "my_other_entity_id")}
    )
    private List<MyOtherEntity> myOtherEntityType2;

    // more fields
}

MyOtherEntity类:

@Data
@Entity
@Table(name = "my_other_entity")
public class MyOtherEntity {

    private String type;

    // more fields
}

更详细的例子:

假设MyOtherEntity type1、type2 和 type3 只有 3 种类型。我的目标是仅将 MyEntity 与 type1 和 type2 的 MyOtherEntity 实体相关联。

是否可以使用 Hibernate 实现此功能?

【问题讨论】:

  • 只加入你的 MyOtherEntity 一次。
  • 这样,当我获取MyEntity 时,所有MyOtherEntity 实体也会被获取。

标签: java spring hibernate


【解决方案1】:

你可以使用@Where注解。

@Where(clause = "type = 'tyep1'")
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
    name = "my_entity_my_other_entity_type1",
    joinColumns = {@JoinColumn(name = "my_entity_id")},
    inverseJoinColumns = {@JoinColumn(name = "my_other_entity_id")}
)
private List<MyOtherEntity> myOtherEntityType1;

@Where(clause = "type = 'tyep2'")
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
    name = "my_entity_my_other_entity_type2",
    joinColumns = {@JoinColumn(name = "my_entity_id")},
    inverseJoinColumns = {@JoinColumn(name = "my_other_entity_id")}
)
private List<MyOtherEntity> myOtherEntityType2;

【讨论】:

  • 这行得通,但我认为如果您考虑到我将有超过 100 种类型和多行,它会非常慢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-10
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多