我正在将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"/>
我应该用什么替换访问字段以保持相同的行为?
答案 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.PropertyAccessFieldImpl
或org.hibernate.property.access.internal.PropertyAccessMixedImpl
。