我有一个经典的Hibernate @Inheritance(strategy=InheritanceType.SINGLE_TABLE)@DiscriminatorFormula。它工作正常。但是,数据库中的@DiscriminatorValue大约有500个不同的值,我只需要将其中的30个映射到Java类(子级),其余的就映射到父Java类。

可以将问题建模为对Animal类的继承示例。

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorFormula("...")
public class Animal implements Serializable {
  ...
  @Column
  public String getName() { ... }
}

因此,我在Java代码中使用@DiscriminatorValue定义了大约30个Animal的子类。当Hibernate发现区分符的未知值时,它将抛出WrongClassException。但是,我需要将这些未知的标识符值映射到一个实体,最好是Animal类。 (在这种情况下,我只需要使用方法getName()即可。)

我知道一种解决方案是将SQL CASE放入@DiscriminatorFormula中,但是然后我必须在其中声明所有30个已知的鉴别符值(当我需要添加其他值时,还要加上更多值)。因此,我正在寻找更灵活的解决方案。

附言这是一个遗留代码,因此我无法更改模型。

最佳答案

tscho为我指明了正确的方向,因此我能够找到适合我的情况的解决方案。 @DiscriminatorValue评估特殊值@DiscriminatorValue("null")@DiscriminatorValue("not null")。第二个是我的权利。

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorFormula("...")
@DiscriminatorValue("not null")
public class Animal implements Serializable {
  ...
  @Column
  public String getName() { ... }
}

07-24 09:55