开发者社区> 问答> 正文

为什么延迟加载的对象中的Mapping注解无效?:报错

在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注解的属性就不能成功映射到目的对象中呢?

展开
收起
kun坤 2020-06-05 22:51:24 738 0
1 条回答
写回答
取消 提交回答
  • 解决方法3:

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

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

    详细信息见

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

    2020-06-05 22:51:31
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载