SINGLE_TABLE inheritance strategy using enums as discriminator value

前端 未结 7 1981
谎友^
谎友^ 2020-12-15 15:31

Is it possible to use an enum as a discriminator value when using SINGLE_TABLE inheritance strategy?

7条回答
  •  遥遥无期
    2020-12-15 16:21

    No, unfortunately you can't.

    If you try to use an enum as discriminator value, you'll get a Type Mismatch exception ("cannot convert from MyEnum to String"), as the only discriminator types allowed are String, Char and Integer. Next, I tried using an enum's name and ordinal combined with DiscriminatorType.STRING and DiscriminatorType.INTEGER, respectively. But this didn't work either, as the @DiscriminatorValue annotation (as any other) requires a constant expression:

    This doesn't work:

    @Entity
    @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn(name="FREQUENCY",
        discriminatorType=DiscriminatorType.STRING
    )    
    public abstract class Event  {}
    
    @Entity
    @DiscriminatorValue(value=Frequency.WEEKLY.name())
    public class WeeklyEvent extends Event {
        // Exception: The value for annotation attribute DiscriminatorValue.value must be a constant expression
    }
    

    Doesn't work either:

    @Entity
    @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn(name="FREQUENCY",
        discriminatorType=DiscriminatorType.INTEGER
    ) 
    public abstract class Event  {}
    
    @Entity
    @DiscriminatorValue(value=Frequency.WEEKLY.ordinal())
    public class WeeklyEvent extends Event {
        // Exception: The value for annotation attribute DiscriminatorValue.value must be a constant expression
    }
    

提交回复
热议问题