po类中id有值,但是使用BeanUtils.copyProperties()拷贝出的vo类id属性为null,检查后发现是因为po继承的父类声明了一个泛型,部分代码如下:
public abstract class AbstractEntity<ID extends Serializable> implements Serializable {
protected ID id;
/**创建人*/
protected ID createdBy;
/**创建时间*/
protected Date createdTime;
/**最后一次修改人*/
protected ID lastModifiedBy;
/**最后一次修改时间*/
protected Date lastModifiedTime;
public void setId(ID id) {
this.id = id;
}
public ID getId() {
return this.id;
}
BeanUtils.copyProperties()のソースコードを確認すると、次のように判断されます。
if (readMethod != null && ClassUtils.isAssignable(writeMethod.getParameterTypes()[0], readMethod.getReturnType()))
setId()パラメータ型であるvoクラスのwriteMethodを取得するために実行されると、結果はLong型になり、getId()の戻り値型であるpoクラスのreadMethodは、結果になります。得られたものはSerializableであるため、BeanUtilsは属性タイプが異なると見なし、コピーされません。id属性。
解決策:poクラスがAbstractEntity <Long>を拡張した後に読み取られる型がLongではなく、親型である理由はまだ明確ではありません。Serializable,
暂时先不用泛型,把id类型直接定义为Long,问题解决