在实体Bean中使用无状态EJB bean

mga*_*mer 6 java jpa ejb-3.0

显然在实体bean中使用无状态EJB bean会有异味,但请考虑如下方案并告诉我您是否知道更好的解决方案:

  1. 我有一个InvoiceTemplate带有字段的实体BeanNextInvoiceDate
  2. 生成NextInvoiceDate是一个复杂的过程,应该在InvoiceTemplate课外进行
  3. NextInvoiceDate应该每次都更新InvoiceTemplate存储到db

现在我有关于实体bean NextInvoiceDate中的@PrePersist @PreUpdatemethon 生成的逻辑InvoiceTemplate.逻辑变得越来越复杂,我想将它移到InvoiceTemplate实体bean之外.它在我看来应该有一个服务来计算NextInvoiceDate.但那么从内部调用这项服务是否正确InvoiceTemplate

Boz*_*zho 3

这并不是什么味道——而是倾向于领域驱动设计。

我不知道有什么方法可以自动执行此操作,但您可以:

  • 在处理 的会话 bean 中Invoicetemplate,注入具有计算下一个日期的逻辑的辅助 bean
  • 在实体上创建一个带有 setter 的私有字段,然后在开始使用它之前调用entity.setNextDateHelper(..)

您还可以检查AspectJ是否不提供某些 EJB 选项,以便在InvoiceTemplate创建给定类型 ( ) 的实体时可以注入 EJB。AspectJ 与 spring beans 的工作方式类似,我不知道 EJB 是否有这样的选项。