DirectPropertyAccessor 的替代品?

Replacement for DirectPropertyAccessor?

我正在将 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"/>

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

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

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

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

使用 access=<class-name> 如果您有自己的自定义 class,您应该只使用它。如果您想使用直接字段访问而不是属性,请使用 access="field" 而不是您现在拥有的。另见 Hibernate Reference Guide.

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