从 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
进行比较(这显然不起作用)。
尝试了以下方法:
@DiscriminatorFormula
,但是每当使用 .createNativeQuery
时都会失败。@JsonProperty
转换@Converter
字段上尝试过type
将所有内容转换为字符串时,它可以存储/获取数据,但它不允许原始的 json 转换。无论我从哪个角度看,现有数据的变化都将是巨大的。
我也有同样的问题。你找到解决办法了吗?