一直在想这个异常应该怎么处理:
- DTO应该在 Controller 中转换,服务层不需要知道它们。
- 事务边界由服务层定义。
但是您如何避免 JPA LazyInitialization 异常呢? DTO 转换可能需要 Lazy Fetched 数据,但由于事务是由服务层处理的,因此无法做到。
我能想到的方法有很多,但都很难看。将 DTO 转换放在服务层现在对我来说似乎是最好的。
最佳答案
是的,在服务层操作DTO肯定更好。当使用 DTO 中包含的更改更新实体时尤其如此,否则您将需要获取和更新分离的实体,将它们传递给服务,将它们再次合并到持久性上下文中,等等。
“DTO 应该在 Controller 中转换,服务层不需要知道它们。”
除此之外,我会说更好的经验法则是 Controller 不需要了解实体。但是对于简单的情况,您可以使用分离的实体而不是 DTO,以避免创建大量小的 DTO 类,尽管我个人总是使用 DTO 只是为了保持一致并使以后的更改更容易。
关于java - 使用 JPA 的事务边界和 DTO 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42956953/