问题标签 [orika]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3208 浏览

java - Orika:如何映射评估条件的布尔值

我有两个类需要映射(目前一种方式)。

我想做类似的事情:

有没有办法做这样的事情?

编辑:我尝试使用这样的 CustomMapper:

这可行,但似乎不可能为同一对类添加许多自定义映射器。相反,正如 Sidi 的回答所解释的那样,我使用了自定义转换器。

谢谢。

0 投票
1 回答
5226 浏览

java - Orika 通用集合自定义映射

Orika 支持泛型类型,但我很难让它与泛型集合一起使用。由于 Orika 不支持不同的收集策略(累积、非累积、孤儿删除),我需要编写一个自定义映射器来处理我的要求。

问题是 Orika 没有应用这个映射器,而是尝试使用正常的集合映射逻辑。

我还尝试在父映射中显式设置类型列表

但这也没有被采纳。

关于我缺少什么的任何提示?

0 投票
1 回答
1386 浏览

java - 使用 Orika 将两个值映射到单个属性

假设我有一个源对象,其中包含两个属性 a 和 b,如下所示:

和具有一个属性 c 的目标对象:

我想定义一个映射,它将:

  1. 如果 a 不为空,则将属性 a 映射到 c
  2. 如果 b 不为空,则将属性 b 映射到 c

我认为将 mapNulls 设置为 false 的映射器是可能的:

但是,当我将属性 a 设置为非 null 值并将属性 b 保留为 null 时,映射会导致目标对象 c 设置为 null。

我是否误解了 mapNulls 的目的?

0 投票
2 回答
2122 浏览

java - Orika 映射 spring 的 org.springframework.security.core.GrantedAuthority

很抱歉用这个问题打扰你,但我最终找到了一个头脚,我想知道我是否以错误的方式处理这个问题。

我想映射一个包含集合的类,org.springframework.security.core.authority.SimpleGrantedAuthority这样我就不需要将 ORM 急切加载的它发送到 spring 安全类中。但是它的“role”属性与getter“getAuthority”相关联,这就是Orika意味着麻烦的时候。我可以强制 Orika 使用 getter 返回的值,将其放入目标类的 setter 中吗?

如果你足够关心,这里有一点我的问题的背景。我正在为应用程序使用 Spring 安全性。我有一个返回 a 的服务,org.springframework.security.core.userdetails.UserDetails以便 spring 可以检查用户是否经过身份验证并且它具有权限。我们拥有的 UserDetail 的实现是一个名为User. 由于此类实现org.springframework.security.core.userdetails.UserDetails,它具有public Collection<? extends GrantedAuthority> getAuthorities();返回该用户权限的方法。

一切都很好,除了我们User在数据库中有这个,用休眠处理。将打开的会话保留在视图中的第一个选择。我们不希望那样。第二个选择是获取ORM,EARGER。我们也不想要那样。因此,我们决定使用 DTO,实现 UserDetail,并用 orika 映射它。就在那时,所有的地狱都崩溃了。org.springframework.security.core.GrantedAuthority是一个接口。我们使用的具体类是org.springframework.security.core.authority.SimpleGrantedAuthority. 这是一个晦涩而致命的映射类,因为它有一个属性名称“role”,但它的getter是“getAuthority”

看来Spring战队和Orika战队在哪里不是很要好的朋友。否则,他们会根据 java 标准命名属性,而 orika 会直接映射它。我也不愿意为这种特殊情况定义自定义映射器,这就是困扰我的地方。除了用特定类的自定义映射器替换所有“魔法”之外,是否有任何已知的方法可以强制 Orika 使用 getter 方法返回的值?

0 投票
1 回答
1753 浏览

java - Orika - 仅当第三个字段与字符串匹配时才映射两个字段

我有两个要使用 Orika 映射的字段

仅当 ClazzB 中的第三个字段“type”与字符串“stk”匹配时,我才想将该字段名称映射到 sname 中的值。

可以使用 Orika 吗?

0 投票
1 回答
842 浏览

mapping - 字节码中存在 orika 映射错误

我正在尝试将 orika 包含在我的项目中。我有 BaseEntity 和 BaseEntityDAO 类,它们只有 Id 列。以及分别由 BaseAuditEntity 和 BaseAuditEntityDTO 类继承的那些。这些类具有审计列,例如 created by、created_date、updated_by、updated_datetime。然后,这些由实际 Entity 和 DTO 类继承的类取决于它们是否有审计列。

我有一个 BaseServiceBean,它采用 ParameterizedTypes 并具有基本的 CRUD 实现。所以在这里我从 orika 文档中考虑了这个例子。所以我的问题是我在实际映射数据时收到以下错误消息.....

异常详细信息:位置:ma/glasnost/orika/generated/Orika_UsersDTO_Users_Mapper25974687500962$0.mapAtoB(Ljava/lang/Object;Ljava/lang/Object;Lma/glasnost/orika/MappingContext;)V @59:invokeinterface 原因:错误存在于bytecode Bytecode: 0000000: 2a2b 2c2d b700 0c2b c000 0e3a 042c c000 0000010: 103a 0519 04b6 0016 c000 1801 a500 2d19 0000020: 052a b400 1e03 32c0 0020 1904 b600 16c0 0000030: 0018 2ab4 0024 0332 c000 26b9 002a 0400 0000040: c000 2cb6 0032 a700 0919 0501 b600 3219 0000050: 04b6 0036 c000 3801 a500 2d19 052a b400 0000060: 1e04 32c0 0020 1904 b600 36c0 0038 2ab4 0000070: 0024 0432 c000 26b9 002a 0400 c000 38b6 0000080: 003c a700 0919 0501 b600 3c19 0519 04b6 0000090: 003f c000 18b6 0043 1905 1904 b600 46c0 00000a0: 0018 b600 4919 0519 04b6 004c c000 18b6 00000b0:004f 1905 1904 b600 52c0 0018 b600 5519 00000c0: 0519 04b6 005b c000 2cb6 0060 1905 1904 00000d0: b600 63c0 0018 b600 6619 0519 04b6 0069 00000e0: c000 18b6 006c 1905 1904 b600 6fc0 0018 00000f0: b600 7219 0519 04b6 0075 c000 18b6 0078 0000100: 1905 1904 b600 7bc0 0018 b600 7e19 04b6 0000110: 0081 c000 1801 a500 2d19 052a b400 1e03 0000120: 32c0 0020 1904 b600 81c0 0018 2ab4 0024 0000130: 0332 c000 26b9 002a 0400 c000 2cb6 0084 0000140: a700 0919 0501 b600 8419 04b6 0087 c000 0000150: 3801 a500 2d19 052a b400 1e04 32c0 0020 0000160: 1904 b600 87c0 0038 2ab4 0024 0432 c000 0000170: 26b9 002a 0400 c000 38b6 008a a700 0919 0000180: 0501 b600 8a19 0519 04b6 008d c000 18b6 0000190: 0090 1905 1904 b600 93c0 0018 b600 962a 00001a0: b400 9a01 a500 112a b400 9a19 0419 052d 00001b0:b900 9d04 00b1
Stackmap Table: append_frame(@73,Object[#14],Object[#16]) same_frame(@79) same_frame(@133) same_frame(@139) same_frame_extended(@323) same_frame(@329) same_frame(@383)同帧(@389)同帧(@437)

引起:java.lang.VerifyError:inconsistent args count operand in invokeinterface 异常详细信息:位置:ma/glasnost/orika/generated/Orika_UsersDTO_Users_Mapper25974687500962$0.mapAtoB(Ljava/lang/Object;Ljava/lang/Object;Lma/glasnost/orika /mappingContext;)v @59:InvokeInterface原因:bytecode bytecode中存在错误:0000000:0000000:2A2B 2C2D B700 0C2B C000 0E3A 042C C000 0000010:103A 0519 04B6 04B6 0016 C00016 C00016 C000 1801 A5002010101019B4 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000倍机000倍机000倍机000倍机000倍机00000..5点视还有0018 2ab4 0024 0332 c000 26b9 002a 0400 0000040: c000 2cb6 0032 a700 0919 0501 b600 3219 0000050: 04b6 0036 c000 3801 a500 2d19 052a b400 0000060: 1e04 32c0 0020 1904 b600 36c0 0038 2ab4 0000070: 0024 0432 c000 26b9 002a 0400 c000 38b6 0000080: 003c a700 0919 0501 b600 3c19 0519 04b6 0000090:003f c000 18b6 0043 1905 1904 b600 46c0 00000a0: 0018 b600 4919 0519 04b6 004c c000 18b6 00000b0: 004f 1905 1904 b600 52c0 0018 b600 5519 00000c0: 0519 04b6 005b c000 2cb6 0060 1905 1904 00000d0: b600 63c0 0018 b600 6619 0519 04b6 0069 00000e0: c000 18b6 006c 1905 1904 b600 6fc0 0018 00000f0: b600 7219 0519 04b6 0075 c000 18b6 0078 0000100: 1905 1904 b600 7bc0 0018 b600 7e19 04b6 0000110: 0081 c000 1801 a500 2d19 052a b400 1e03 0000120: 32c0 0020 1904 b600 81c0 0018 2ab4 0024 0000130: 0332 c000 26b9 002a 0400 c000 2cb6 0084 0000140: a700 0919 0501 b600 8419 04b6 0087 c000 0000150: 3801 a500 2d19 052a b400 1e04 32c0 0020 0000160: 1904 b600 87c0 0038 2ab4 0024 0432 c000 0000170: 26b9 002a 0400 c000 38b6 008a a700 0919 0000180: 0501 b600 8a19 0519 04b6 008d c000 18b6 0000190:0090 1905 1904 b600 93c0 0018 b600 962a 00001a0: b400 9a01 a500 112a b400 9a19 0419 052d 00001b0: b900 9d04 00b1
Stackmap Table: append_frame(@73,Object[#14],Object[#16]) same_frame(@79) same_frame(@133) same_frame(@139) same_frame_extended(@323) same_frame(@329) same_frame(@383)同帧(@389)同帧(@437)

当我从数据库中获取实体后尝试从实体映射到 DTO 时出现此错误。

0 投票
1 回答
1056 浏览

orika - 使用 Orika 进行附加集合映射的最佳方法?

是否可以使用 Orika 为集合定义附加映射策略?

我目前正在使用 Orika 和自定义实现的混合 - 但是它不是一种可以很好扩展的方法。

0 投票
3 回答
12062 浏览

java - Orika - 列表到列表的转换

这可能很简单,但我在文档中找不到。我有一个人班

和它的清单

我想更改它们以将它们更改为

但没有明确的循环。有没有办法将 MapperFacade.map 用于列表以列出一行转换?

0 投票
1 回答
1634 浏览

java - Orika 映射到 Hibernate 实体引发异常

我正在尝试将 DTO 映射到其对应的 Hibernate 实体。我从 Hibernate 会话加载实体并立即执行映射。

这是我得到的例外:

这是在我的工厂构建器上配置的 HibernateUnenhanceStrategy,这就是我的 Mapper 的样子:

我现在的解决方法是在从会话加载和使用 Orika 映射之间自行取消对实体的增强,但我真的不想这么明确。我怎样才能得到这个工作?

0 投票
2 回答
867 浏览

java - Java bean 映射库 - 选择哪个(将一个对象转换为另一个)?

我有多层项目,其中包含模型、DTO、使用 DTO 的管理器/服务,还有一些 CXF Web 服务客户端,其层可以转换对我的模型的响应。我们使用不同的方法,项目很大,我们使用例如 Spring Beautils 的许多手动映射,这些映射可能会产生错误,难以维护但速度最快。

我发现 Orika 是一个有趣的库,它不像 Dozer 那样使用反射,它会在某些时候生成代码(如手动代码),但我不知道什么时候 - 当你使用 maven 构建应用程序或例如,当应用程序部署在 Weblogic 服务器上时?你会选择什么???

顺便说一句:你知道其他值得使用的库吗(我使用 Java 1.7、log4j、junit、spring、hibernate、cxf、jersey、guava、lamba4j)?