如何将带参数的CompositeUserType迁移到Hibernate 6

4sup72z8  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(186)

我正在迁移一个实现CompositeUserTypeParameterizedType接口的自定义类型。此自定义类型用于Map两个数字数组,其中包括:hardLevelssoftLevels。数组长度通过@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中正确恢复。

4bbkushb

4bbkushb1#

Hibernate团队向我推荐的克服这种变化的一个选择是使用继承:将CompositeUserType实现为一个抽象类,并通过构造函数传递其子类的参数。当然,它没有保持完全的向后兼容性,因为不再支持基于注解的参数设置方法。另一方面,它提供了相同的灵活性。

相关问题