我有一个经典的Hibernate @Inheritance(strategy=InheritanceType.SINGLE_TABLE)用@DiscriminatorFormula。工作正常。但是,@DiscriminatorValue数据库中大约有500个不同的值,我需要将它们中的大约30个映射到Java类(子类),将其余的映射到父Java类。
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorFormula
@DiscriminatorValue
可以将问题建模为对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()即可。)
WrongClassException
我知道一种解决方案是将SQL CASE放入,@DiscriminatorFormula但随后我必须声明所有30个已知的鉴别符值(当我需要添加其他值时还要加上更多值)。因此,我正在寻找更灵活的解决方案。
PS这是一个遗留代码,因此我无法更改模型。
tscho为我指明了正确的方向,因此我能够找到适合我的情况的解决方案。该@DiscriminatorValue评估特殊值@DiscriminatorValue("null")和@DiscriminatorValue("not null")。第二个是我的权利。
@DiscriminatorValue("null")
@DiscriminatorValue("not null")
@Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorFormula("...") @DiscriminatorValue("not null") public class Animal implements Serializable { ... @Column public String getName() { ... } }