Closed taowater closed 1 month ago
JDK版本: openjdk_17 hutool版本: 5.8.29(请确保最新尝试是否还有问题)
涉及jpa的pojo生成
BeanUtil.copyProperties(source, target, false);
大佬好,这边在使用BeanUtil的时候遇到了一些问题, source是jpa在自定义sql返回的一个代理pojo(因为jpa的限制,自定义sql组装自定义pojo,需要定义为接口,它底层搞一个代理实体) 这时候拷贝是失败的,我跟踪了对应代码,发现在BeanToBeanCopier的copy方法中 final Map<String, PropDesc> sourcePropDescMap = BeanUtil.getBeanDesc(source.getClass()).getPropMap(copyOptions.ignoreCase); 取得的只有一个"h"属性,亦即把代理类当普通类去处理了,导致拷贝失败。 这边尝试了用spring的拷贝工具是可以正常拷贝的,请大佬考虑一下这个问题
Hutool中对Bean的定义规则导致的。
Hutool中定义Bean必须含有字段和Getter方法才可以,如果一个Bean(如代理bean)是没有字段的,因此无法匹配字段,导致拷贝失败。
对于代理类这种特殊对象,考虑将代理类包装为ValueProvider即可。
ValueProvider
版本情况
JDK版本: openjdk_17 hutool版本: 5.8.29(请确保最新尝试是否还有问题)
问题描述(包括截图)
涉及jpa的pojo生成
BeanUtil.copyProperties(source, target, false);
大佬好,这边在使用BeanUtil的时候遇到了一些问题, source是jpa在自定义sql返回的一个代理pojo(因为jpa的限制,自定义sql组装自定义pojo,需要定义为接口,它底层搞一个代理实体) 这时候拷贝是失败的,我跟踪了对应代码,发现在BeanToBeanCopier的copy方法中 final Map<String, PropDesc> sourcePropDescMap = BeanUtil.getBeanDesc(source.getClass()).getPropMap(copyOptions.ignoreCase); 取得的只有一个"h"属性,亦即把代理类当普通类去处理了,导致拷贝失败。 这边尝试了用spring的拷贝工具是可以正常拷贝的,请大佬考虑一下这个问题