【发布时间】:2016-03-20 17:47:31
【问题描述】:
假设我有一个 POJO 类 Meal。此类使用 ORM 映射(例如 JPA + Hibernate),因此我可以将其保存在数据库中。除其他外,此类包含由 ORM 延迟加载的 List<Dish> dishes(Dish 是另一个映射的 POJO)。
现在我有一个业务层方法Meal getNextDueMeal()。这由 UI 层调用,然后将餐点显示给用户。当然,组成餐点的菜品也应该展示出来。
但是我应该如何处理呢?如果我尝试天真地遍历getMeals() 返回的列表,我会得到LazyInitializationException。我可以在 UI 层中维护一个EntityManger,例如通过使用 Spring 的 @Transactional 注释。但是从业务逻辑返回的对象将保持持久性,即如果我以某种方式修改 UI 中的Meal-“POJO”,一旦我从@Transactional-方法返回,它就会自动保存,这可能不是我想要什么。
tl;dr: 业务层是否应该将持久对象返回给 UI 层?如果没有,我该如何处理延迟加载?
【问题讨论】:
标签: java spring jpa orm separation-of-concerns