替代DirectPropertyAccessor?

时间:2019-05-27 06:46:45

标签: java spring hibernate-5.x hbm hbmxml

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

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

2 个答案:

答案 0 :(得分:1)

仅当您要使用自己的自定义类时,才应使用access=<class-name>。如果要使用直接字段访问而不是属性,请使用access="field"而不是现在的属性。另请参见Hibernate Reference Guide

在内部,您的当前版本在升级Hibernate时将使用DirectPropertyAccessor,它将自动适应新引入的其他类的使用。现在,负担由休眠承担了,而您不必了解休眠的内部API。

答案 1 :(得分:0)

问题不是Spring版本,而是Hibernate版本。

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

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