【问题标题】:JPA Entity Persisting another entityJPA 实体持久化另一个实体
【发布时间】: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


【解决方案1】:

您尝试过@PrePersist 注解吗?

JPA prepersist

【讨论】:

  • 是的,但这不会持久化实体,除非我关联两个实例并进行级联持久化
猜你喜欢
  • 2016-06-10
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
相关资源
最近更新 更多