迁移至Hibernate 5:如何替换PropertyAccessor组件?
Hibernate 4 到 5 迁移:PropertyAccessor 替换方案
在Hibernate 5中,原org.hibernate.property.PropertyAccessor的功能被重构为PropertyAccessStrategy体系,核心变化是需要先通过策略类构建具体的属性访问实例,再获取Getter/Setter。
步骤1:替换导入包
将原来的导入替换为:
import org.hibernate.property.access.spi.PropertyAccess; import org.hibernate.property.access.spi.PropertyAccessStrategy; import org.hibernate.property.access.spi.Setter; import org.hibernate.property.access.spi.Getter;
步骤2:修改代码逻辑
原代码直接通过PropertyAccessor获取Setter/Getter:
propertyAccessor.getSetter(target, fieldName).set(currentTarget, value, factory); propertyAccessor.getGetter(target, fieldName).get(currentTarget);
替换为以下逻辑,先构建PropertyAccess实例,再获取对应的访问器:
// 基于策略类构建属性访问实例,target为实体类Class,fieldName为目标属性名 PropertyAccess propertyAccess = propertyAccessStrategy.buildPropertyAccess(target, fieldName); // 获取Setter并执行赋值操作 Setter setter = propertyAccess.getSetter(); setter.set(currentTarget, value, factory); // 获取Getter并执行取值操作 Getter getter = propertyAccess.getGetter(); Object value = getter.get(currentTarget);
补充说明
PropertyAccessStrategy是属性访问的策略接口,本身不直接提供Getter/Setter,而是通过buildPropertyAccess方法创建针对特定属性的PropertyAccess实例,该实例才封装了具体的属性访问逻辑。- 如果之前使用默认的属性访问策略,可通过
org.hibernate.property.access.internal.PropertyAccessStrategyBasicImpl.INSTANCE获取对应的PropertyAccessStrategy实例。
内容的提问来源于stack exchange,提问作者Michu93
相关产品推荐
相关产品推荐

