问题标签 [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 投票
0 回答
1378 浏览

java - 推土机:从基类中删除字段

我有很多扩展单个基类的类。在进行推土机映射时,我想做的是为基类创建一个映射,并在映射任何子类时引用该映射。

例如:

所以当我做类似的事情时

生成的 customMap 排除了 valueA。

0 投票
2 回答
3855 浏览

java - Dozer Mapping 和 Hibernate 延迟初始化

我有以下推土机映射:

com.company.xx.xx.model.MyClass com.company.xx.xx.model.MyClassToMap

远方 _

客户 客户

我用休眠加载 MyClass。但我有一个延迟加载客户。我不从客户那里加载所有东西。但是映射想要映射来自客户的所有属性,所以会抛出一个惰性初始化异常。

我如何告诉推土机只映射客户而不是客户的所有字段?

0 投票
1 回答
2385 浏览

java - 使用 Dozer 映射值对象

我正在使用 Dozer 将我的 DTO 映射到 JPA 实体。

用例之一是已经存在的实体的 DTO 表示到达 WS,然后我使用 JPA 找到实体并使用 Dozer使用map(source, destination)映射方式将 DTO 映射找到的实体上(不是地图(来源,目的地类))。

我的实体(例如地址)上有一些值对象(具有经典的不可变值对象语义)作为@Embeddables。问题是,我希望推土机在设置时总是创建一个的地址实例,例如:员工对象,而不是映射到已经存在的地址实例。

因此,使用以下课程:

我希望推土机始终使用新的地址实例调用 setAddress(),而不是尝试使用 getAddress() 映射新的地址字段。

有没有办法做到这一点?

0 投票
3 回答
8044 浏览

java - 使用 Java、Dozer 和 Hibernate 映射和更新到数据库的 DTO

我正在使用 Dozer 将 Hibernate 实体映射到它们的 DTO。一个简化的示例类如下:


现在映射工作正常,但我在尝试进行更新时遇到问题。假设我的数据库中有一个角色(1,“管理员”)。我的视图首先生成带有更新字段的 DTO:

最终,持久化 Role 的类接收 DTO 并通过 Dozer 将其转换为 Entity 类以持久化更改:

此时,我的角色实体已经丢失了它的ID,大概是因为ID列被定义为自增,而我显然无法更新null-ID实体。

那么我应该如何解决这个问题,以便 ID 和更新的字段都映射到实体?我总是可以将实体对象带入休眠状态,并使用 DTO 中的字段更新其每个字段并将其保存回来,但这会破坏使用 Dozer 的全部目的。

谢谢你的帮助。

0 投票
1 回答
495 浏览

apache-flex - Hibernate Map 一个没有关系的对象

我有这样的关系:

一个人有一个或多个地址。一位客户有一个或多个地址。

人员、客户和地址是单独的表。

我曾经用@OneToMany 关系来做到这一点。这给我带来了问题,因为我们的 flex 客户端正在向我发送对象,这些对象是在客户端中创建的,并且必须在数据库中创建。

如果客户端向我发送一个引用相同地址的人和客户,休眠将创建两个地址对象,因为这两个地址对象不是相同的 java 对象(不是相同的指针)。

这是一个由 BlazeDS 和 Dozer 引起的问题,它们在发送到服务器时会创建新对象。

所以我想要的是人员和客户对象中没有关系的地址 ID,因此休眠不会创建对象。但是当我读取一个人对象时,我想根据存储的地址 id 填充一个临时地址对象。

有谁知道这是否可能?

0 投票
6 回答
14972 浏览

java - 防止 Dozer 触发 Hibernate 延迟加载

我正在使用 Spring 事务,因此当 POJO 到 DTO 转换发生时,事务仍然处于活动状态。

我想防止 Dozer 触发延迟加载,以便永远不会发生隐藏的 sql 查询:所有获取都必须通过 HQL 显式完成(以获得对性能的最佳控制)。

  1. 这是一个好的做法(我在任何地方都找不到它的文档)?

  2. 如何安全地做到这一点?

我在 DTO 转换之前试过这个:

我不知道事务会发生什么,但是 Hibernate 会话没有关闭,延迟加载仍然发生。

我试过这个:

它可以防止延迟加载,但是直接在应用程序层(在我的项目中称为“外观”)中操作会话是一种好习惯吗?我应该害怕哪些负面影响?(我已经看到涉及 POJO -> DTO 转换的测试不能再通过 AbstractTransactionnalDatasource Spring 测试类启动,因为这些类试图触发不再链接到活动会话的事务的回滚)。

我还尝试将传播设置为 NOT_SUPPORTED 或 REQUIRES_NEW,但它会重用当前的 Hibernate 会话,并且不会阻止延迟加载。

0 投票
1 回答
708 浏览

json - 将(智能)GWT 覆盖类型从客户端传递到服务器并使用 Hibernate 持久性

我们的项目利用 gilead 使用 GWT RPC 模型将模型对象传递给客户端。我们面临的问题是,随着我们模型的增长/变化,在客户端对 JSON 进行序列化以进行处理变得越来越成为一个问题。

我正在考虑使用覆盖类型作为我们实体对象的客户端表示。

将其与 Hibernate 结合使用时,一般方法是什么,您是否必须重新创建对象服务器端然后持久化?

是否可以将客户端对象传回,然后使用 Dozer 映射到服务器端 Entity ?

谢谢, 安德罗斯

0 投票
3 回答
216 浏览

java - 集合映射

假设我有以下课程:

我想用 Dozer 将 A1 类映射到 A2,其中 A1.bList 包含 B1 对象,而 A2.bList 仅包含 B1 对象的 ID。

映射会是什么样子?

谢谢你。

0 投票
4 回答
6803 浏览

java - 自定义推土机映射

我正在尝试使用推土机来转换

到一个实例:

在Java代码中,我会像这样执行转换

默认情况下,Dozer 不执行此转换,因为Target没有foos属性(只是一个 getter)。

实际上,我有很多这样的属性需要映射。一种选择是告诉 Dozer直接映射私有字段,但这并不完全令人满意,因为:

  • 我将需要在 Dozer XML 配置中按名称指定要以这种方式映射的每个字段
  • 访问私有字段是不好的

有没有更好的办法?

0 投票
2 回答
4237 浏览

dozer - 如何使用 Dozer 将布尔值转换为字符串?

我是推土机的新手,我正在尝试将字符串映射到布尔值,反之亦然。谁能告诉我推土机支持这个还是我必须创建一个自定义转换器。该字符串将包含真或假,因此将直接映射。另外我使用的是 Dozer API 而不是 XML 配置。谢谢你的帮助