【问题标题】:Reading different entities from same Spring JPA repository using Hibernate SINGLE_TABLE strategy使用 Hibernate SINGLE_TABLE 策略从同一个 Spring JPA 存储库中读取不同的实体
【发布时间】:2023-01-21 02:43:30
【问题描述】:

我在同一个表中有基本抽象类和 2 个实体,在休眠中使用描述符类型继承。

@MappedSuperclass()
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="type", discriminatorType = DiscriminatorType.INTEGER)
public abstract class Relation {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(columnDefinition = "bigint unsigned", name = "id")
    public long id;
    @Enumerated(EnumType.ORDINAL)
    RelationType type;
}

@Table(name = "relation")
@Entity
@DiscriminatorValue("0")
public class Ban extends Relation {
    // ...
    public RelationType type = RelationType.BAN;
}

第二个实体相同,但使用@DiscriminatorValue("1")。

问题是:当通过单个存储库读取这些实体时,SQL 在“where”条件下不包含鉴别器值。

每个实体的单独存储库是必须的吗?

【问题讨论】:

    标签: hibernate spring-data-jpa


    【解决方案1】:

    不必为每个实体使用单独的存储库,但在您的情况下可能有必要,具体取决于您希望如何检索数据。如果只想检索特定子类的行,则需要在 SQL 查询的“where”条件中包含鉴别器列。一种方法是为每个子类创建单独的存储库,每个子类都有自己的查询方法,在“where”条件中包含适当的鉴别器值。

    或者,您可以使用 Hibernate 的条件 API 或示例查询 (QBE) 来根据鉴别器值过滤结果。通过这种方式,您可以为所有实体使用一个存储库,并根据鉴别器值过滤它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 2015-07-06
      • 2019-04-14
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多