Hibernate ClassMetadata and Javabean PropertyDescriptor

1. Hibernate ClassMetadata

Provided by hibernate, can be used to copy beans and so on, however, need hibernate session.

SessionFactory sf = session.getSessionFactory();
ClassMetadata sourceMetadata = sf.getClassMetadata(sourceEntity.getClass());
ClassMetadata targetMetadata = sf.getClassMetadata(targetEntity.getClass());

Type sourcePropertyType = null;
Type tragePropertyType = null;
CollectionMetadata collectionMetadata = null;

// copy primary key and set primary key.
Serializable sourcePk = sourceMetadata.getIdentifier(sourceEntity, EntityMode.POJO);
Serializable targetPk = targetMetadata.getIdentifier(targetEntity, EntityMode.POJO);
if (targetPk == null) {
targetMetadata.setIdentifier(targetEntity, sourcePk, EntityMode.POJO);
}
// copy other properties.
for (String property : sourceMetadata.getPropertyNames()) {
sourcePropertyType = sourceMetadata.getPropertyType(property);
tragePropertyType = targetMetadata.getPropertyType(property);
if (sourcePropertyType == null || tragePropertyType == null) {
continue;
}
// copy primary key;
if (sourcePropertyType.isCollectionType() && tragePropertyType.isCollectionType()) {
Collection<Object> sourceValues = (Collection<Object>) sourceMetadata.getPropertyValue(sourceEntity, property, EntityMode.POJO);
Collection<Object> targetValues = (Collection<Object>) targetMetadata.getPropertyValue(targetEntity, property, EntityMode.POJO);
collectionMetadata = sf.getCollectionMetadata(sourceMetadata.getEntityName() + "." + property);
Class<?> sourceClazz = collectionMetadata.getElementType().getReturnedClass();
collectionMetadata = sf.getCollectionMetadata(targetMetadata.getEntityName() + "." + property);
Class<?> targetClazz = collectionMetadata.getElementType().getReturnedClass();
if (sourceValues != targetValues) {
copyCollection(sourceClazz, sourceValues, targetClazz, targetValues, session, targetEntity);
}
} else {
targetMetadata.setPropertyValue(targetEntity,
property,
sourceMetadata.getPropertyValue(sourceEntity, property, EntityMode.POJO),
EntityMode.POJO);
}
}

2. Javabean PropertyDescriptor
Provided by jdk reflection, can be used to copy beans and so on.

PropertyDescriptor[] properties = Introspector.getBeanInfo(masterTo.getClass()).getPropertyDescriptors();

//通过PropertyDescriptor ps进行设值和取值。
pd.getWriteMethod().invoke(clazzIns, Long.valueOf(keys[i]));
Object o = pd.getReadMethod().invoke(domain);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值