在Jpa工程中使用dozer遇到的一个奇怪现象?
在JPA工程中使用dozer遇到的一个奇怪的问题, 百思不得其解。
有这么几个对象, UserSupplier, Supplier,SupplierView(DTO对象 返回给前端)
UserSupplier:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "supplier_id", nullable = false)
private Supplier supplier;
UserSupplier与Supplier是多对一的关系,并且延迟加载。
Supplier:
@Id
@GeneratedValue
@Mapping("supplierId")
private int id;
SupplierView:
private int supplierId;
在Controller代码中,先取得UserSupplier List 然后再得到Supplier List
List<Supplier> supplierList = new ArrayList<>(usList.size());
usList.forEach(us -> supplierList.add(us.getSupplier()));
接着通过Dozer将Supplier对象转为SupplierView并返回
return BeanMapper.mapList(supplierList, SupplierView.class);
奇怪的是其他字段都能成功映射, 单单supplierId不行,始终为0。
经尝试, 有如下的解决方法:
1. 更改属性值
将SupplierView中的supplierId改为id
这时
Supplier:
@Id
@GeneratedValue
private int id;
SupplierView:
private int id;
2. 更改延迟加载为立即加载
UserSupplier:
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "supplier_id", nullable = false)
private Supplier supplier;
虽然能解决 但仍不知道实际的原因是什么? 同为延迟加载,为何使用了Mapping注解的属性就不能成功映射到目的对象中呢?
解决方法3:
resources目录下添加一个dozer.properties, 内容为
org.dozer.util.DozerProxyResolver=org.dozer.util.HibernateProxyResolver
详细信息见
http://dozer.sourceforge.net/documentation/proxyhandling.html
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。