在Jpa工程中使用dozer遇到的一个奇怪现象? 为什么延迟加载的对象中的Mapping注解无效?
在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注解的属性就不能成功映射到目的对象中呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
解决方法3:
resources目录下添加一个dozer.properties, 内容为
org.dozer.util.DozerProxyResolver=org.dozer.util.HibernateProxyResolver
详细信息见
http://dozer.sourceforge.net/documentation/proxyhandling.html