我正在迁移一个实现CompositeUserType
和ParameterizedType
接口的自定义类型。此自定义类型用于Map两个数字数组,其中包括:hardLevels
和softLevels
。数组长度通过@TydeDef
注解作为参数传递。
然而,@TypeDef
在Hibernate 6中被放弃,并被@CompositeType
取代,它不接受任何参数。
Hibernate 5中的Map如下所示:
@Entity
@TypeDef(defaultForType = BendableScore.class, typeClass = BendableScoreHibernateType.class, parameters = {
@Parameter(name = "hardLevelsSize", value = "3"), @Parameter(name = "softLevelsSize", value = "2") })
class BendableScoreHibernateTypeTestJpaEntity {
@Columns(columns = { @Column(name = "initScore"),
@Column(name = "hard0Score"), @Column(name = "hard1Score"), @Column(name = "hard2Score"),
@Column(name = "soft0Score"), @Column(name = "soft1Score") })
protected BendableScore score;
....
}
我尝试实现了新的CompositeUserType
,它可以很好地用于没有前面提到的数组的不同类,但是我看不出如何使用数组大小迁移这种类型。我还没有找到任何例子或测试显示类似复杂的CompositeUserType
。
另一个问题是向后兼容性:在Hibernate 5中使用此自定义类型持久化的数据需要在Hibernate 6中正确恢复。
1条答案
按热度按时间4bbkushb1#
Hibernate团队向我推荐的克服这种变化的一个选择是使用继承:将
CompositeUserType
实现为一个抽象类,并通过构造函数传递其子类的参数。当然,它没有保持完全的向后兼容性,因为不再支持基于注解的参数设置方法。另一方面,它提供了相同的灵活性。