首页 > 解决方案 > 向 JPA 实体添加业务逻辑

问题描述

在下一个场景中,我必须将一些带有 JPA 规范的静态过滤器(添加 WHERE 子句)应用到 JPA 实体以获取过滤的狗列表,例如,我从实体收到一个 id,我必须应用相同的过滤器但为每个未完成的过滤器发送错误消息。例如:拥有实体 Dog,我收到一个 id,使用 JPA 获取该实体并应用一些过滤器,例如狗年龄>3 岁等...

我的想法是重用 JPA 规范来做到这一点,但使用它们不会给我关于为什么我没有得到实体以及没有完成哪个过滤器以发送错误消息的信息。

我所做的是将 isDogOlderThan3Years() 之类的方法添加到 JPA 实体中,并且实体本身会为每个过滤器询问其属性等。我认为这与非贫血实体有关。这是一个好/坏的解决方案吗?有更好的吗?

谢谢

标签: jpadomain-driven-designanemic-domain-model

解决方案


我认为规范模式在这里可能很有用。

您可以使用访问者模式将规范组合转换为 JPA 查询,并且可以实现remainderUnsatisfied上述文章中讨论的操作,以找出给定候选者不满足哪些条件。

如果您不关心关注点分离,您可以直接在规范上实现 , 等方法toJpaFilterdescribe

我在我的一个项目中使用了这种方法,我设法重用相同的规范来执行以下操作,并且效果很好:

  • 定义复杂的访问控制规则和过滤器
  • 定义和执行业务规则
  • 生成规范的用户友好描述

推荐阅读