Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 作为数据传输对象的持久性实体_Java_Persistence_Dto - Fatal编程技术网

Java 作为数据传输对象的持久性实体

Java 作为数据传输对象的持久性实体,java,persistence,dto,Java,Persistence,Dto,我的web应用程序中有一些支持持久性的Java对象和所有的@Annotation。所有这些对象都位于数据层中。将这些持久性对象用作数据传输对象是最佳做法吗 例如,如果我想传回从数据存储中获取的数据,我应该直接返回那些持久性对象,还是应该手动将数据复制到中间DTO并将其传回其他层?您建议采用哪种方法?我从来都不需要通过将持久性实例复制到不同的DTO类来提供额外的抽象级别。如果您完全确定没有副本会最终出现在会话存储中,或者会持久化/迁移到另一个实例/任何其他实例,则无需这样做 如果您需要在多个会话/

我的web应用程序中有一些支持持久性的Java对象和所有的@Annotation。所有这些对象都位于数据层中。将这些持久性对象用作数据传输对象是最佳做法吗


例如,如果我想传回从数据存储中获取的数据,我应该直接返回那些持久性对象,还是应该手动将数据复制到中间DTO并将其传回其他层?您建议采用哪种方法?

我从来都不需要通过将持久性实例复制到不同的DTO类来提供额外的抽象级别。

如果您完全确定没有副本会最终出现在会话存储中,或者会持久化/迁移到另一个实例/任何其他实例,则无需这样做

如果您需要在多个会话/请求中保留这些对象,那么这是有意义的


另一个用例是,当您需要非常彻底地解耦loginc和持久层(即交换不同的持久层)时,通过注释的耦合可能会很麻烦。

我认为这样做是可以的(事实上,这些ORM的主要优点是在不同的层中使用这些域对象,而不使用不必要的DTO),如果您遵循以下准则:

  • 您不需要扩展会话边界,也就是说,任何与数据库相关的更改都应该使用您定义的数据访问层来完成,而不是通过其他层中传递的对象来完成
  • 您在其他层(数据访问层之上的层,如业务逻辑层和表示层)中需要的任何数据都预先填充在这些对象中,否则您将根据ORM行为获得异常
  • 不要为了解决第2条中提到的问题而扩展会话边界

  • +说得好。这正是我们在产品中使用它们的方式。