问题标签 [dozer]

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 投票
4 回答
13164 浏览

java - dozer 布尔属性映射

isProperty()如果该属性的访问器定义为而不是,则 Dozer 似乎不会映射布尔属性getProperty()

以下 groovy 脚本说明了该问题:

最后一行的断言失败。但是,如果我重命名ProductDto.isFoo()ProductDto.getFoo()就会通过。

我可以在推土机映射文件中设置一个标志/选项来指示它对布尔属性使用 anis或访问器吗?get或者,我可以为每个布尔属性添加自定义规则,但这不是很吸引人。

尽管上面的示例是用 Groovy 编写的,但我没有理由相信等效的 Java 代码不会表现出相同的行为。

这些 DTO 由 JAXB 生成(它生成一个“is”访问器,而不是布尔值的“get”访问器),所以我不能重命名访问器。我正在使用推土机 5.3.2。

0 投票
3 回答
5159 浏览

gwt - GWT + 实体 + JPA + DTO + 推土机

我想知道处理实体 bean(JPA 2)到 DTO 的映射的最佳方法是什么。由于不能通过 GWT “直接”使用实体 bean,因此您需要处理 DTO。

我有几个具有各种关系的实体(OneToOne、OneToMany、ManyToMany 与连接表等)。最初,我开始在 MyEntityTransform.java 类的帮助下手动将所有实体转换为 DTO,方法如下:

其他方法是:persistent2BeanCollection(...)、persistent2BeanMap(...)、bean2Persistent(...)、bean2PersistentCollection(...)

在处理集合时,这成为一项挑剔的任务,尤其是当同一个实体引用了几个其他实体时;

我一直在考虑使用 DOZER 框架来处理实体和 DTO 之间的映射。这里提到:http ://code.google.com/intl/fr/webtoolkit/articles/using_gwt_with_hibernate.html

但是我不确定它处理各种 JPA 映射(例如许多)的能力以及在 dozer-bean-mappings.xml 文件中配置它的工作量。另外我猜这个框架正在密集地使用反射来执行映射操作。这种方法比“手动”执行的映射要慢得多,例如当我使用 MyEntityTransform.java 类中的方法时。

你有什么建议?我对每个人使用 GWT 处理 JPA 实体的经验感兴趣。

谢谢。

切利尼奥

http://www.celinio.net/techblog

0 投票
1 回答
862 浏览

java - 如何确保 OpenJPA 中的非托管/托管对象身份?

我正在使用 OpenJPA 来持久化对象。我最初使用的是 OpenJPA 1.2,但后来升级到了 OpenJPA 2.1。对象保存在服务器的内存中,它们被序列化到客户端,并且可以作为未管理的对象被接收回来。推土机用于移除 JPA 的东西,并且一直都有。它以前没有引起任何问题。我依赖于 JPA 在保存推土机映射的 JPA 对象时能够识别 @Id。

所以基本上我有一个大型的嵌套对象图,其中一些带有双向(循环)引用。此结构具有已更改的数据和未由客户端更改的数据。它被发送给客户端,它可能之前也可能没有被持久化。只有当它至少被发送回服务器一次时,它才会被持久化。我有一个对象引用 OneToOne 关系中的另一个对象:

问题是,当我收到返回的对象*时,它是存储在服务器上的另一个实例,并且不受管理。如果我添加 cascade = CascadeStrategy.ALL 我会得到重复的插入,因为它将对象再次添加到数据库中。如果我不使用它,我会收到 JPA 尝试持久化非托管对象的异常,请添加注释。总之:

Graph 还没有持久化,A 或 B 也没有。一旦 Graph 被发送到服务器,它们都被持久化了。一个新的图被持久化,它具有不同的 A 但相同的 B。它没有意识到 B 已经被持久化并重新创建它,即使它具有相同的@Id。

我有一种感觉,JPA 认为对象与内存中的对象不同。

我确信 OpenJPA 1.2 似乎基于 @Id 注释将对象识别为等效的。我尝试手动修复引用,并尝试将引用从非托管对象更改为加载到服务器内存中的托管对象。不幸的是,这在我重新启动服务器之前有效,并且它不会修复之前所做的引用。我知道这不是正确的解决方案。

我该如何解决这个问题?

  • 我正在使用 GWT 的序列化,效果很好。GWT 会导致这种情况吗?我认为这是一个 JPA 问题。
0 投票
0 回答
1905 浏览

java - Dozer - 从两个源类映射到公共目标类

这是我的场景。我有三个简单的类:SourceClassA、SourceClassB 和 DestClass。我通过以下方式在映射 XML 中定义了两个自定义转换器:

这种映射是否有效?我们可以使用自定义转换器从两个不同的源类映射到同一个目标类吗?

就我而言,当我尝试这样做时,在 bean 映射期间,Dozer 根本不会调用 ClassBConverter。有什么想法吗 ?

0 投票
1 回答
3857 浏览

list - 通用列表的推土机映射

我有一个类似的 ListWrapper

和一个像豆子

和另一个豆类

现在的想法是用 AccountBo 类型的 bean 填充列表并使用 Dozer 映射列表,然后用 AccountDto Beans 填充。

但是 - 目标列表中的 Bean 的类型是 AccountBo ...。

我该怎么做才能获得 AccountDto 的列表?

0 投票
3 回答
11264 浏览

mapping - 带有自定义转换器的推土机深度属性映射

我的应用程序中有深层属性映射(从域对象到 DTO,反之亦然),类似于下一个示例:

当 Dozer 将 Domain 转换为 DTO 时,它映射employee.idemployeeId,就可以了。
当 Dozer 将 DTO 转换为 Domain 时,它会映射employeeId到 id=employeeId 的新 Employee 实例。

我想为这个深层属性映射创建一些逻辑,但我就是想不出解决方案。我尝试实现CustomConverter(或扩展DozerConverter)但 Dozer 将 Integer 类型作为源和目标类传递给我(并期望 Integer 作为结果)。

编辑:更准确地说,我需要employee在 Domain 中映射到null如果employeeIdDTO 中为 0。

这可能吗?

有什么建议吗?

根据答案编辑:我解决了现场级自定义转换器的问题。而不是前面提到的映射,现在我有这样的东西......

在 ManyToOneIdMapper 我有...

custom-converter-param只是域对象中 id 字段的名称。使用该名称,我只需在转换器中调用 setter 或 getter 方法。可能,这不是最快乐的解决方案,但它适用于我的问题场景。

0 投票
1 回答
4550 浏览

java - 我如何映射列表列出> 与推土机?

假设我有一个对象 Foo,其中包含对对象 Bar 的引用列表:

使用推土机,假设 Bar 到 java.util.HashMap 是一个简单的映射,我如何将 Foo 的实例映射到 java.util.HashMap 的实例,以便 Bar 的引用实例也映射到 java.util.HashMap ? 也就是说,我希望映射的结果是一个带有键“barList”的 HashMap,它包含一个 ArrayList> 的实例。此列表中的每个 HashMap 应该是 Bar 到 HashMap 的映射。

例如,如果 Foo 持有对 Bar 的单个引用而不是列表,我会这样做:

这将产生一个看起来像这样的 hashmap(使用 JSON 对象来表示 HashMaps):

但是我想知道如何使用对 Bar 的引用列表来表达对 HashMap 的转换,以便得到以下信息:

首选不使用自定义映射器的答案,但我了解这是否是实现此行为的唯一方法。

0 投票
2 回答
11828 浏览

java - BeanUtils.copyProperties() 与 DozerBeanMapper.map()

BeanUtils.copyProperties()当我需要映射所有字段并且字段名称相同时,我正在使用bean 到 dto 映射。但是我不需要将源 bean 的所有字段映射到目标 dto,我使用了 DozerBeanMapper.map(),因为我不知道在这种情况下使用 BeanUtils。

所以我认为这两种方法都有自己的功能,两者之间没有任何相似之处。我对吗?请指导我。

0 投票
2 回答
8842 浏览

spring - 如何指定 dozer.properties 位置?

我正在使用带有 Spring 3.0.x 的推土机。这是我的映射器 bean 定义:

我想将 dozer.properties 文件放在 src/main/resources/conf/app/dozer.properties 中。

如何指定自定义 dozer.properties 位置?

0 投票
6 回答
13083 浏览

spring - 使用 Spring 依赖注入的自定义转换器

有没有办法在 Dozer 中定义一个自定义转换器,用于将一种顶级类型转换为另一种类型,它本身就是一个 Spring bean,因此可以注入它的依赖项?

dozer 文档建议添加以下 XML 定义:

不幸的是,这会导致 Dozerorg.dozer.converters.TestCustomConverter直接实例化,这将跳过依赖注入。有没有办法引用 Spring bean?