我有一个经典的休眠@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
模式@DiscriminatorFormula
。它工作正常。但是,数据库中有大约 500 个不同的值,@DiscriminatorValue
我需要将其中大约 30 个映射到 Java 类(子类),其余映射到父 Java 类。
该问题可以建模为 Animal 类的示例继承。
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorFormula("...")
public class Animal implements Serializable {
...
@Column
public String getName() { ... }
}
所以我在 Java 代码中定义了大约 30 个 Animal 的子类@DiscriminatorValue
。当 Hibernate 发现鉴别器的未知值时,它会抛出WrongClassException
. 但是,我需要将这些未知的鉴别器值映射到一个实体,最好是 Animal 类。(在这种情况下,我只需要使用 getName() 方法。)
我知道一种解决方案是将 SQL CASE 放入其中,@DiscriminatorFormula
但随后我必须在其中说明所有 30 个已知的鉴别器值(当我需要添加其他值时再加上更多)。所以我正在寻找更灵活的解决方案。
PS这是一个遗留代码,所以我不能改变模型。