java - 使用 JPA 的事务边界和 DTO 转换

标签 java jpa transactions dto lazy-initialization

一直在想这个异常应该怎么处理:

  1. DTO应该在 Controller 中转换,服务层不需要知道它们。
  2. 事务边界由服务层定义。

但是您如何避免 JPA LazyInitialization 异常呢? DTO 转换可能需要 Lazy Fetched 数据,但由于事务是由服务层处理的,因此无法做到。

我能想到的方法有很多,但都很难看。将 DTO 转换放在服务层现在对我来说似乎是最好的。

最佳答案

是的,在服务层操作DTO肯定更好。当使用 DTO 中包含的更改更新实体时尤其如此,否则您将需要获取和更新分离的实体,将它们传递给服务,将它们再次合并到持久性上下文中,等等。

“DTO 应该在 Controller 中转换,服务层不需要知道它们。”

除此之外,我会说更好的经验法则是 Controller 不需要了解实体。但是对于简单的情况,您可以使用分离的实体而不是 DTO,以避免创建大量小的 DTO 类,尽管我个人总是使用 DTO 只是为了保持一致并使以后的更改更容易。

关于java - 使用 JPA 的事务边界和 DTO 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42956953/

相关文章:

java - Spark : Splitting using delimiter doesn't work with commas

java - JTable 卡住列对齐问题(Java 1.6)

java - 我正在尝试执行 jdbc 事务。但是一旦我运行代码,数据库就不会更新

java - 多个分片数据库 Hibernate 事务

java - pom 中缺少artifactId 且查找父级时出错?

java - Android Studio - 编辑器中的 FileNotFound 异常

java - 更新后JPA OneToMany问题

Hibernate OGM Neo4j (5.0) Wildfly 10 错误。提供者 org.hibernate.ogm.service.impl.OgmIntegrator 不是子类型

java - 如何使用 JsonManagedReference 从相关对象读取属性

transactions - Hibernate envers 跨多个事务的单个修订