3

我目前正在使用 Orika 在 Hibernate 托管域对象和模型 (DTO) 之间进行映射。我这样做是因为我想在从 Model --> Domain 开始时合并集合,这样如果没有进行任何更改,实体的 Hibernate 版本号就不会迭代。我最初设置了一个映射器,定义如下:

A extends CustomMapper<List<Domain>, List<Model>> { ... }

这在实际上不使用持久层的单元测试中工作得很好,但是当我使用 Hibernate 进行集成测试时,它根本不会被调用。事实上,我的对象中的集合永远不会在任何一个方向上填充。挖掘发现这是由于 Hibernate 使用 PersistentList(实现了 List,但没有类型信息)。所以现在我有两个映射器:

A extends CustomMapper<List<Domain>, List<Model>> { ... }
B extends CustomMapper<PersistentList, List<Model>> { ... }

如果我删除 A,那么 Orika 的行为就像映射器根本不存在一样。我认为这是因为当它分析我提供的所有类映射时,它找不到与 PersistentList 匹配的任何内容,因此不包括在内。

如果我删除 B,那么 Orika 将不会正确地将 Hibernate 返回的域对象映射到模型,因为它不会映射 PersistentList。

有没有办法让这个更干净?如何以明确的方式定义涵盖所有情况的单个映射?

4

0 回答 0