Hibernate更新、PropertyAccessor、ChainedPropertyAccessor、PropertyAccessorFactory在5.3.7版中不再可用
我迁移到Hibernate 5.3.7。 下面是我在迁移过程中遇到问题的代码片段Hibernate更新、PropertyAccessor、ChainedPropertyAccessor、PropertyAccessorFactory在5.3.7版中不再可用,hibernate,hibernate-5.x,Hibernate,Hibernate 5.x,我迁移到Hibernate 5.3.7。 下面是我在迁移过程中遇到问题的代码片段 PropertyAccessor propertyAccessor = new ChainedPropertyAccessor(new PropertyAccessor[] { PropertyAccessorFactory.getPropertyAccessor(resultClass, null), PropertyAccessorFactory.getP
PropertyAccessor propertyAccessor = new ChainedPropertyAccessor(new PropertyAccessor[] {
PropertyAccessorFactory.getPropertyAccessor(resultClass, null),
PropertyAccessorFactory.getPropertyAccessor("field") });
类:PropertyAccessor、ChainedPropertyAccessor、PropertyAccessorFactory在Hibernate 5.3.7中不再可用。此代码是否来自IgnoreCaseAlassToBeanResultTransformer?这需要更改才能使用Hibernate 5。以下版本适用于Hibernate 5:
package org.apec.abtc.dao.hibernate.transform;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.property.access.internal.PropertyAccessStrategyBasicImpl;
import org.hibernate.property.access.internal.PropertyAccessStrategyChainedImpl;
import org.hibernate.property.access.internal.PropertyAccessStrategyFieldImpl;
import org.hibernate.property.access.internal.PropertyAccessStrategyMapImpl;
import org.hibernate.property.access.spi.Setter;
import org.hibernate.transform.AliasedTupleSubsetResultTransformer;
/**
* IgnoreCaseAlias to BeanResult Transformer
*
* @author Stephen Gray
*/
public class IgnoreCaseAliasToBeanResultTransformer extends AliasedTupleSubsetResultTransformer
{
/** The serialVersionUID field. */
private static final long serialVersionUID = -3779317531110592988L;
/** The resultClass field. */
@SuppressWarnings("rawtypes")
private final Class resultClass;
/** The setters field. */
private Setter[] setters;
/** The fields field. */
private Field[] fields;
private String[] aliases;
/**
* @param resultClass
*/
@SuppressWarnings("rawtypes")
public IgnoreCaseAliasToBeanResultTransformer(final Class resultClass)
{
if (resultClass == null)
{
throw new IllegalArgumentException("resultClass cannot be null");
}
this.resultClass = resultClass;
this.fields = this.resultClass.getDeclaredFields();
}
@Override
public boolean isTransformedValueATupleElement(String[] aliases, int tupleLength) {
return false;
}
/**
* {@inheritDoc}
*/
@Override
public Object transformTuple(final Object[] tuple, final String[] aliases)
{
Object result;
try
{
if (this.setters == null)
{
this.aliases = aliases;
setSetters(aliases);
}
result = this.resultClass.newInstance();
for (int i = 0; i < aliases.length; i++)
{
if (this.setters[i] != null)
{
this.setters[i].set(result, tuple[i], null);
}
}
}
catch (final InstantiationException | IllegalAccessException e)
{
throw new HibernateException("Could not instantiate resultclass: " + this.resultClass.getName(), e);
}
return result;
}
private void setSetters(final String[] aliases)
{
PropertyAccessStrategyChainedImpl propertyAccessStrategy = new PropertyAccessStrategyChainedImpl(
PropertyAccessStrategyBasicImpl.INSTANCE,
PropertyAccessStrategyFieldImpl.INSTANCE,
PropertyAccessStrategyMapImpl.INSTANCE
);
this.setters = new Setter[aliases.length];
for (int i = 0; i < aliases.length; i++)
{
String alias = aliases[i];
if (alias != null)
{
for (final Field field : this.fields)
{
final String fieldName = field.getName();
if (fieldName.equalsIgnoreCase(alias))
{
alias = fieldName;
break;
}
}
setters[i] = propertyAccessStrategy.buildPropertyAccess( resultClass, alias ).getSetter();
}
}
}
/**
* {@inheritDoc}
*/
@Override
@SuppressWarnings("rawtypes")
public List transformList(final List collection)
{
return collection;
}
@Override
public boolean equals(Object o) {
if ( this == o ) {
return true;
}
if ( o == null || getClass() != o.getClass() ) {
return false;
}
IgnoreCaseAliasToBeanResultTransformer that = ( IgnoreCaseAliasToBeanResultTransformer ) o;
if ( ! resultClass.equals( that.resultClass ) ) {
return false;
}
if ( ! Arrays.equals( aliases, that.aliases ) ) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = resultClass.hashCode();
result = 31 * result + ( aliases != null ? Arrays.hashCode( aliases ) : 0 );
return result;
}
}
package org.apec.abtc.dao.hibernate.transform;
导入java.lang.reflect.Field;
导入java.util.array;
导入java.util.List;
导入org.hibernate.hibernateeexception;
导入org.hibernate.property.access.internal.PropertyAccessStrategyBasicImpl;
导入org.hibernate.property.access.internal.PropertyAccessStrategyChainedImpl;
导入org.hibernate.property.access.internal.PropertyAccessStrategyFieldImpl;
导入org.hibernate.property.access.internal.propertyaccessstrategympl;
导入org.hibernate.property.access.spi.Setter;
导入org.hibernate.transform.aliasedtupleSubstresultTransformer;
/**
*至BeanResult变压器的IgnoreCaseAlias
*
*@作者斯蒂芬·格雷
*/
公共类IgnoreCaseAliasToBeanResultTransformer扩展了AliasedTupleSubstreSultTransformer
{
/**SerialVersionId字段*/
私有静态最终长serialVersionUID=-3779317531110592988L;
/**resultClass字段*/
@抑制警告(“原始类型”)
私有最终类resultClass;
/**二传手场*/
私人二传者[]二传者;
/**田野*/
私有字段[]字段;
私有字符串[]别名;
/**
*@param resultClass
*/
@抑制警告(“原始类型”)
公共信号案例别名ToBeanResultTransformer(最终类resultClass)
{
if(resultClass==null)
{
抛出新的IllegalArgumentException(“resultClass不能为null”);
}
this.resultClass=resultClass;
this.fields=this.resultClass.getDeclaredFields();
}
@凌驾
公共布尔值isTransformedValueATupleElement(字符串[]别名,int-tupleLength){
返回false;
}
/**
*{@inheritardoc}
*/
@凌驾
公共对象转换元组(最终对象[]元组,最终字符串[]别名)
{
客观结果;
尝试
{
if(this.setters==null)
{
this.alias=别名;
设定值(别名);
}
结果=this.resultClass.newInstance();
对于(int i=0;i