【发布时间】: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 这似乎对我很有效