加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – JPA最佳实践:静态查找实体

发布时间:2020-12-14 16:26:34 所属栏目:Java 来源:网络整理
导读:想象一下,事件实体引用了一个状态实体: @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;}@E
想象一下,事件实体引用了一个状态实体:
@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;
}

状态映射到一个小表’状态’.状态是典型的参考数据/查找实体.

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

我不知道如果将状态建模为一个实体是个好主意.感觉更像是常数的枚举…

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

另一方面,如果我想为某个事件设置一个特定的状态,我不能简单地分配我所记住的常数状态.我必须首先查找正确的实体:

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

我可以避免上述代码片段吗?我害怕一个表现的惩罚,它看起来很沉重…

>我必须用只读属性来调整东西吗?
>我可以预取这些查找实体并将其用作常量吗?
>我是否错过了关键的JPA功能?
> …?

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

谢谢!
J.

解决方法

Can I avoid the above code fragment? I’m affraid for a performance penalty and it looks very heavy?

那么你可以使用一个枚举.我真的不明白你为什么不实际

但是,如果您真的想使用一个实体,那么它将是二级缓存的完美候选者,这将解决您的性能问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读