java - 如何将内部对象从 Hibernate Entity 复制到 DTO?
问题描述
我有实体类
public Class StudentEntity{
private int id;
private String name;
private AddressEntity address;
private ProfileEntity profile;
//getter setter
}
public Class StudentDTO{
private int id;
private String name;
private AddressDTO address;
private ProfileDTO profile;
//getter setter
}
当我使用(来自spring / apache common)时,它会单独BeanUtils.copyProperties();
复制id
and 。name
怎么复制address
andprofile
也?
如果必须编写自定义实用程序,您能分享一下代码片段吗?
解决方案
BeanUtils,克隆或序列化在这里不起作用,因为内部数据类型不同。我建议您手动设置 StudentDTO 的字段。您可以对 AddressDTO 和 ProfileDTO使用转换构造函数。复制构造函数是合法名称,但由于我们也在转换类型,所以更好的名称将是转换构造函数。
JDK 中的转换构造函数的示例是ArrayList(Collection<? extends E> c)
,即https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#ArrayList-java.util.Collection-从任何Collection 对象并将 Collection 对象中的所有项目复制到新创建的 ArrayList 对象。
例子:
StudentEntity studentEntityObj = new StudentEntity();
studentEntityObj.setId(1);
studentEntityObj.setName("myStudent");
AddressEntity addressEntityObj = new AddressEntity();
addressEntityObj.setCity("myCity");
studentEntityObj.setAddress(addressEntityObj);
// All above lines would be taken care of already (i.e. data is filled from DB)
StudentDTO studentDTOObj = new StudentDTO();
// Call conversion constructor
AddressDTO addressDtoObj = new AddressDTO(addressEntityObj);
studentDTOObj.setAddress(addressDtoObj);
studentDTOObj.setId(studentEntityObj.getId());
studentDTOObj.setName(studentEntityObj.getName());
System.out.println(studentDTOObj.toString());
其中包含转换构造函数的 AddressDTO(或 ProfileDTO)如下所示:
public class AddressDTO {
private String city;
// Conversion constructor
public AddressDTO(AddressEntity a) {
this.city = a.getCity();
}
@Override
public String toString() {
return "AddressDTO [city=" + getCity() + "]";
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
印刷
StudentDTO [id=1, name=myStudent, address=AddressDTO [city=myCity]]
推荐阅读
- react-native - 类 FBSDKPackage 中的构造函数 FBSDKPackage 不能应用于给定类型
- java - 在不删除前一个圆圈的情况下绘制圆圈
- installation - 安装 TIBCO 以构建 EAR 文件
- google-sheets - 如何避免在对两列求和的查询顶部看到“sum()”?
- ios - UITableViewCell Auto Layout crashed
- java - 坚持使用最大值适用于小值但不适用于大值
- python - 在火车上运行分类器不起作用
- php - URL 最后允许特殊字符。为什么?
- python - 为什么python的全局变量不能在其他函数中使用?
- java.util.scanner - 如果用户输入了无效的选择,为什么会跳过这段代码的 user_input 部分?