gpt4 book ai didi

java - JPA 最佳实践 : Static Lookup Entities

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:30 25 4
gpt4 key购买 nike

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

@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 映射到一个小表“status”。 Status是一个典型的引用数据/查找实体。

   code  label
----- --------------
CRD Created
ITD Initiated
PSD Paused
CCD Cancelled
ABD Aborted

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

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

另一方面,如果我想为一个事件设置一个特定的状态,我不能简单地分配我想到的恒定状态。我必须先查找正确的实体:

event.setStatus(entityManager.find(Status.class, "CRD"))

我可以避免上面的代码片段吗?我害怕性能损失,它看起来很重......

  • 我必须调整只读属性吗?
  • 我可以预取这些查找实体并将它们用作常量吗?
  • 我是否错过了一个重要的 JPA 功能?
  • ...?

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

谢谢!J.

最佳答案

您可以使用 entityManager.getReference(Status.class, "CRD"),如果它仅用于设置外键,则可能无法从数据库中获取实体。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com