Hibernate 5 > 6:Enum 类型的 DiscriminatorColumn

问题描述 投票:0回答:1

从 hibernate 5.* 迁移到 6.* 时,似乎存在一个我无法解决的问题。在 hibernate 5.* 中,我使用了鉴别器类型的枚举。在这次迁移工作之前,这种方法非常有效。

以下场景:

@JsonTypeInfo(
    use = JsonTypeInfo.Id.NAME,
    include = JsonTypeInfo.As.EXISTING_PROPERTY,
    property = "type"
)
@JsonSubTypes(
    JsonSubTypes.Type(value = GenericAction::class, name = "generic"),
    JsonSubTypes.Type(value = BreakAction::class, name = "break")
)
@Entity
@DiscriminatorColumn(name = "type")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
class Action (

    @Column(name = "type", updatable = false, insertable = false)
    @Enumerated(EnumType.STRING)
    var type: ActionType = ActionType.GENERIC, //GENERIC, BREAK
....
)
@Entity
@DiscriminatorValue("GENERIC")
class GenericAction (
... 
): Action(ActionType.GENERIC)
@Entity
@DiscriminatorValue("BREAK")
class BreakAction (
... 
): Action(ActionType.BREAK)

这有效。它将在数据库中保存

'GENERIC'
'BREAK'
并在获取时创建正确的多态子类型。

在休眠 6.* 中不再如此。我发现的问题是它试图将

String
ActionType
进行比较(这显然不起作用)。

尝试了以下方法:

  1. @DiscriminatorFormula
    ,但是每当使用
    .createNativeQuery
    时都会失败。
  2. 不使用枚举,但这会在我们的 JSON 序列化器/反序列化器级别产生问题,因为无法完成相同的
    @JsonProperty
    转换
  3. @Converter
    字段上尝试过
    type
  4. 深入研究源代码,看看我是否可以以任何方式注入/覆盖或操纵枚举/字符串比较。

将所有内容转换为字符串时,它可以存储/获取数据,但它不允许原始的 json 转换。无论我从哪个角度看,现有数据的变化都将是巨大的。

hibernate kotlin hibernate-mapping
1个回答
0
投票

我也有同样的问题。你找到解决办法了吗?

© www.soinside.com 2019 - 2024. All rights reserved.