【发布时间】:2011-07-16 11:04:48
【问题描述】:
我有一个“销售”实体,在实体被持久化之前,我想创建一个“收入”实体。我可以在会话 bean 中执行此操作,但我希望它封装在 Sale 实体中会更好。所以我可以这样做:
em.persist(sale);
它会自动创建一个收入实体并将其持久化。
我不希望 Sale 与 Income 关联,因为我可以将它们关联起来并持续进行级联。
就像销售实体会创建一个收入实体的实例,然后调用 EntityManager 上的 persist 方法,因为这既不可行也不是一个好主意,我开始认为它应该由 EJB 执行。意见?
【问题讨论】:
-
您是否有理由不直接从您的 EJB 中持久化收入实体?除了让其他人使用/维护您的代码更难遵循的设计之外,我看不出这会给您带来什么。
-
@Christina,我不确定,我认为如果它是由 Sale 实体完成的,它将向上层隐藏这种复杂性,这样我就不必记住每次都创建这两个实体我创建一个销售。我在这方面没有太多经验,这不是一个好主意吗?
-
就我个人而言,除非我有充分的理由,否则我不会这样做,因为通常人们不会期望实体会像那样做不寻常的事情。如果您需要在代码中的许多地方创建这两个实体,您总是可以在您的 EJB 中拥有一个私有方法(如果需要从多个 EJB 调用它,甚至可以在一个帮助类中)来执行此操作。这样做的好处是,阅读您的代码的人可以看到被调用的方法,并且可以看到它的作用,而不是依赖 PrePersist 注释或大多数人如果不知道它在那里就不会寻找的任何类似的东西。
-
看起来销售和收入之间存在一对一的关系。为什么不这样建模,然后听从 Padmarag 的建议?
标签: java jpa jakarta-ee entity