在Jpa工程中使用dozer遇到的一个奇怪现象? 为什么延迟加载的对象中的Mapping注解无效?

发布于 2021-11-27 09:08:39 字数 1360 浏览 667 评论 1

在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月牙弯弯 2021-11-27 16:45:15

解决方法3:

resources目录下添加一个dozer.properties, 内容为

org.dozer.util.DozerProxyResolver=org.dozer.util.HibernateProxyResolver

详细信息见

http://dozer.sourceforge.net/documentation/proxyhandling.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文