我们有一个Flex客户端,我们发送DTO对象。 这样做是因为我们的域对象包含大量数据,而客户端主要只查看一小部分数据。
我们更喜欢DTO在延迟加载之上,因为很多域对象都包含我们不想发送给客户端的数据(字符串)。
当我们在客户端上进行更改时,我们将DTO发送回服务器。
我想知道在域对象上应用这些更改的最佳实践,并让hibernate保存它。
我应该先读取域对象,还是将值从DTO复制到域对象?
是否有可以帮助我的API,所以我不必为我的所有域对象创建映射器?
答案 0 :(得分:1)
使用hibernate,最佳做法是将DTO
用作Bean
,这也应该映射到table in DB
。阅读有关hibernate here中映射的更多信息。如果您使用的是旧版数据库,则可能会发生这种情况。
假设我有2个豆 User
和Address
。这些将映射到支持表tUsers
和tAddresses
。这是您熟悉hibernate的Typicall结构。您可以将User
和Address
类称为 Bean 。
现在,让我们说我需要一个DTO
,其数据将从多个表的查询中填充,并且没有支持表。有multiple ways来填充DTO
而不是使用 Bean 进行数据传输。
我的定义是有争议的,但我觉得第一种方法(使用Bean)是好的,无论你称之为DTO
还是Bean
。
答案 1 :(得分:1)
当您获得DTO时,您从数据库加载相应的对象并根据DTO的状态更新它们。 Hibernate将负责更改跟踪,因此只有更改的实体才会保存回数据库。
您希望在代码中执行此操作的原因是在应用更改时应用的其他逻辑和验证。例如