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.PropertyAccessFieldImpl
或 org.hibernate.property.access.internal.PropertyAccessMixedImpl
。
使用 access=<class-name>
如果您有自己的自定义 class,您应该只使用它。如果您想使用直接字段访问而不是属性,请使用 access="field"
而不是您现在拥有的。另见 Hibernate Reference Guide.
内部你当前的版本会使用DirectPropertyAccessor
升级Hibernate时它会自动适应新引入的其他class来使用。现在这个负担由 hibernate 承担,而不是你必须知道 hibernate 的内部 API。
我正在将 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.PropertyAccessFieldImpl
或 org.hibernate.property.access.internal.PropertyAccessMixedImpl
。
使用 access=<class-name>
如果您有自己的自定义 class,您应该只使用它。如果您想使用直接字段访问而不是属性,请使用 access="field"
而不是您现在拥有的。另见 Hibernate Reference Guide.
内部你当前的版本会使用DirectPropertyAccessor
升级Hibernate时它会自动适应新引入的其他class来使用。现在这个负担由 hibernate 承担,而不是你必须知道 hibernate 的内部 API。