【问题标题】:JPA - What's the best practice way to load static data from a Database lookup table?JPA - 从数据库查找表加载静态数据的最佳实践方法是什么?
【发布时间】:2015-10-13 10:30:50
【问题描述】:

我的关系数据库架构中有一个名为 UserRole 的查找表,其中包含以下表列:

Role_Id | Role_Name | Role_Desc | (some other foreign key ids linking to other tables) |
-------------------------------------------------------------------------------
1       | Admin     | Admin user| ......                                               | 

上表中的所有行都是静态数据(它们在我的应用程序中永远不会改变)

目前我有一个实体持久对象:

@Entity
@Table(name = "UserRole")
public class RoleEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "Role_Id")
private int id;

@Column(name = "Role_Name")
private String role_name;

@Column(name = "Role_Desc")
private String role_desc;
....

// other code omitted for brevity
}

我有一个等效的 Repository 类,它只获取数据:例如

entityManager.find(...).getResultsList() 等等...

.................................................. ....................

每当我需要使用这些角色时,我都会直接调用数据库。我觉得没有必要这样做,因为在我的情况下数据永远不会改变。我想将数据存储在 Enum 中,而不是将数据存储在数据库中,但数据已经是遗留系统的一部分,我无法更改数据库设计,而且该表已经有许多指向其他表的链接。

我只想在启动时加载它们一次。

最好的方法是什么?

它只是像一个单例类来维护一个(静态?)所有角色的列表,并且在初始化之后,使用 Repository 类来调用 Database 以将数据提取到内存中的列表中。?

【问题讨论】:

  • 为什么人们认为有一种神奇的“正确”方式,而所有其他方式在某种程度上都是错误的。决定什么对你有用并继续前进
  • 抱歉,我对问题的措辞可能不太好。我的意思是问什么是“最佳实践”的做法,如果有的话?
  • 在 JPA 和 Java EE 中都没有模式可以以最好的方式做到这一点。我建议使用最简单的解决方案 - 编写并创建一个单例 bean(例如 @ApplicationScoped),它将存储您的查询结果。
  • 谢谢,@OndrejM 这似乎对我很有效

标签: java database jpa


【解决方案1】:

解决这个特定问题的方法是 OndrejM 建议的。它就像创建一个单例 bean 并在启动时存储我的查询结果一样简单。当然,没有模式或官方方法可以做到这一点。这就是答案。

【讨论】:

    猜你喜欢
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多