0

我正在将 Spring 4.3.2 项目升级到 Spring 5.1.5。我的一个测试用例开始因错误而失败。

ClassNotFoundException:org.hibernate.property.DirectPropertyAccessor

这是有道理的,因为它在 Hibernate 5.x 中已被弃用,这是 Spring 5.x 的最低兼容 Hibernate 版本。我在我的 hbm.xml 中使用它,如下所示:

<class name="Notification"
       table="T_NOTIFICATION"
       lazy="false">

    <id name="id"
        type="integer"
        column="ID"
        unsaved-value="null"
        access="property">
        <generator class="identity"/>
    </id>

    <!-- A versioned entity. -->
    <version name="version"
             column="VERSION"
             access="org.hibernate.property.DirectPropertyAccessor"/>

我应该用什么替换访问字段以保持相同的行为?

4

2 回答 2

1

access=<class-name>仅当您有自己的自定义类要使用时,才应该使用它。如果您想使用直接字段访问而不是属性,请使用access="field"而不是您现在拥有的。另请参阅Hibernate 参考指南

在内部,您当前的版本将DirectPropertyAccessor在升级 Hibernate 时使用,它会自动适应新引入的其他类来使用。现在这个负担在于hibernate,而不是你必须知道hibernate的内部API。

于 2019-05-27T08:56:02.053 回答
0

问题不在于 Spring 版本,而在于 Hibernate 版本。

org.hibernate.property.DirectPropertyAccessor在 5.x 版本的休眠中已弃用。

DirectPropertyAccessor应替换为任一org.hibernate.property.access.internal.PropertyAccessFieldImplorg.hibernate.property.access.internal.PropertyAccessMixedImpl更高的休眠版本。

于 2019-05-27T06:54:42.137 回答