JPA 最佳实践:静态查找实体
2022-09-04 21:30:38
想象一下,事件实体引用状态实体:
@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
我不确定将状态建模为实体是否是一个好主意。这感觉更像是常量的枚举...
通过将 Status 映射为实体,我可以在 Java 代码中使用 Status 对象,并且 Status 值在数据库中同样存在。这有利于报告。
另一方面,如果我想将特定状态设置为事件,我不能简单地分配我心目中的恒定状态。我必须首先查找正确的实体:
event.setStatus(entityManager.find(Status.class, "CRD"))
我可以避免上述代码片段吗?我担心性能损失,它看起来非常沉重...
- 我是否必须使用只读属性进行调整?
- 是否可以预取这些查找实体并将其用作常量?
- 我是否错过了一个关键的 JPA 功能?
- ...?
欢迎所有意见/建议/建议!
谢谢!J.