Java 在实体Bean中使用无状态EJB Bean 显然在实体bean中使用无状态EJB bean,但请考虑如下场景,如果您知道更好的解决方案,请告诉我: 我有一个InvoiceTemplate实体Bean,带有字段NextInvoiceDate 生成NextInvoiceDate是一个复杂的过程,应该在InvoiceTemplate类之外执行 NextInvoiceDate应在每次将InvoiceTemplate存储到数据库时更新

Java 在实体Bean中使用无状态EJB Bean 显然在实体bean中使用无状态EJB bean,但请考虑如下场景,如果您知道更好的解决方案,请告诉我: 我有一个InvoiceTemplate实体Bean,带有字段NextInvoiceDate 生成NextInvoiceDate是一个复杂的过程,应该在InvoiceTemplate类之外执行 NextInvoiceDate应在每次将InvoiceTemplate存储到数据库时更新,java,jpa,ejb-3.0,Java,Jpa,Ejb 3.0,目前,我有关于在@PrePersist@PreUpdate实体bean中生成NextInvoiceDate的逻辑。逻辑越来越复杂,我想把它移出InvoiceTemplate实体bean之外。在我看来,应该有一个服务来计算NextInvoiceDate。但是,从InvoiceTemplate内部调用此服务是否正确?这不是一种气味-它是一种倾向于领域驱动的设计 我不知道自动执行此操作的任何方法,但您可以: 在处理Invoicetemplate的会话bean中,注入具有计算下一个日期逻辑的助手bea

目前,我有关于在
@PrePersist
@PreUpdate
实体bean中生成
NextInvoiceDate
的逻辑。逻辑越来越复杂,我想把它移出
InvoiceTemplate
实体bean之外。在我看来,应该有一个服务来计算
NextInvoiceDate
。但是,从
InvoiceTemplate
内部调用此服务是否正确?

这不是一种气味-它是一种倾向于领域驱动的设计

我不知道自动执行此操作的任何方法,但您可以:

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

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

您需要像服务或EJB这样复杂的东西吗?您可以只编写一个静态方法(可能在实用程序类上)来保存逻辑吗?通常情况下,我对这类事情很有偏见,但如果你所拥有的只是一些不需要任何DB交互或大量对象协作的复杂逻辑,那么这可能是最干净的方法。

它是实体bean(EJB2.0)还是JPA实体?这样做会损害测试。嗯,如果它确实需要DB交互和大量的对象协作呢?如果需要,那么您可能又回到了服务或EJB,这样您就可以参与事务或共享上下文了。这让你回到了时间问题、协调和依赖性上。说得好+我只想说第一句话。