想象一下,事件实体引用了状态实体:

@Entity
@Table(name = "event")
public class Event()
{
  @Id
  @Column(name = "id", nullable = false)
  private long id;
  ...

  @ManyToOne
  @JoinColumn(name = "status_code", nullable = false)
  private Status status;
}


@Entity
@Table(name = "status")
public class Status()
{
  @Id
  @Column(name = "code", nullable = false)
  private String code;

  @Column(name = "label", nullable = false, updatable = false)
  private String label;
}

状态映射到一个小表'status'。 状态是典型的引用数据/查找实体。
   code  label
   ----- --------------
   CRD   Created
   ITD   Initiated
   PSD   Paused
   CCD   Cancelled
   ABD   Aborted

我不确定将状态建模为实体是否是一个好主意。感觉更像是常量的枚举...

通过将状态映射为实体,我可以在Java代码中使用Status对象,并且Status值同样存在于数据库中。这对于报告非常有用。

另一方面,如果我想为事件设置特定的状态,则不能简单地分配要记住的恒定状态。我必须先查找正确的实体:
event.setStatus(entityManager.find(Status.class, "CRD"))

我可以避免上面的代码片段吗?我很敬畏性能,而且看起来很沉重...
  • 我是否需要调整具有只读属性的内容?
  • 我可以预取这些查找实体并将其用作常量吗?
  • 我错过了关键的JPA功能吗?
  • ...?

  • 欢迎所有意见/建议/建议!

    谢谢!
    J.

    最佳答案



    好吧,您可以改用enum。我真的不明白为什么你实际上没有。

    但是,如果您真的想使用实体,那么它将是二级缓存的理想选择,这将解决您对性能的担忧。

    关于java - JPA最佳实践: Static Lookup Entities,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3613641/

    10-10 14:40
    查看更多