2015-10-13 46 views
1

我有一個名爲UserRole的在我的關係數據庫模式的查找表,其中有如下表列:JPA - 從數據庫查找表中加載靜態數據的最佳實踐方法是什麼?

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類,它只是提取數據:for eg

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

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

每當我需要使用這些角色時,我都會直接調用數據庫。我覺得沒有必要這樣做,因爲數據在我的情況下永遠不會改變。我想將數據存儲在Enum中,而不是將數據存儲在數據庫中,但數據已經是遺留系統的一部分,並且我無法更改數據庫設計,並且該表已經有很多鏈接指向其他表。

我想只在啓動時加載它們一次。

這樣做的最好方法是什麼?

它是否就像是一個單例類來維護所有角色的(靜態?)列表,並且在初始化之後,使用Repository類調用Database來將數據提取到內存中的列表中。 ?

+1

爲什麼人們認爲有一種神奇的「正確」*方式*和其他所有方式*在某種程度上是錯誤的。決定什麼對你有用,並繼續前進吧 –

+0

啊我的道歉,我對這個問題的措辭可能不是那麼好。我打算問一下,如果有這樣的做法,什麼是「最佳做法」? – SoftwareDeveloper

+2

JPA和Java EE中沒有任何模式可以最好地實現它。我建議儘可能使用最簡單的解決方案 - 在編寫和創建單例bean(例如'@ ApplicationScoped')時,可以存儲查詢結果。 – OndrejM

回答

1

OndrejM建議什麼對這個特定問題有效。就像創建一個singleton bean並在啓動時存儲我的查詢結果一樣。當然,沒有任何模式或官方的方式來做到這一點。這就是答案。

相關問題