2011-11-10 35 views
1

我正在將我的JDBC項目遷移到Hibernate。 我對存儲在我的數據庫中的參考數據有疑問,特別是它是聯合國國家名單。 我從here休眠時的國家代表

當我使用JDBC時,我剛剛擁有一個保存該數據的表,並且我用它來驗證數據庫中的數據。例如,用戶不能進入他住在該表中不存在的國家。

現在,我有代表一個人的Pojo,並且我有一個代表一個國家的字符串成員,我如何使用Hibernate來堅持它,我需要爲國家創建一個Pojo嗎? 如何將下面的代碼引用到不是pojo的「引用表」?

@OneToOne 
@JoinColumn(name = "country_iso") 
private String country; 

上面的代碼,就是我開始寫,但我不知道這是做它的方式。

+0

更多的混淆,然後才... – stdcall

回答

4

我認爲最好創建一個類Country,使用iso代碼作爲id。

您需要設置多對一的關係,因爲在一個國家可以有多人存在。

國家:

@Id 
String id; 

人:

@ManyToOne 
@JoinColumn(name="COUNTRY", referencedColumnName="ID") 
Country country; 

這樣一來,你可以使用Hibernate加載所有國家作爲一個集合,你可以設置規則的關係(如可選=假等)

1

在這種情況下,您可以按照下面的方法。我假設你不會在運行時插入Country表。

Person類中爲countryId有一個字段。

@Column(name = "country_iso") 
private String countryId; 
當你想給 Person保存到數據庫

得到取決於國家名稱(從數據庫)的countryId並將其設置爲Person的countryId。然後保存Person

如果需要,您可以爲Country設置POJO,並在Person類中將其引用。

3

我建議你爲國家創建一個實體,如

import javax.persistence.Entity; 
import javax.persistence.Id; 
import org.hibernate.annotations.Cache; 
import org.hibernate.annotations.CacheConcurrencyStrategy; 

@Entity 
@org.hibernate.annotations.Entity(mutable=false) //since this table is supposed to 
@Table(name="Countries") 
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY) 
public class Country{ 
@Id 
String ccode; 
String name; 
} 

這個映射,你國家POJO映射到表的國家,並設置該實體不變並啓用2L緩存以及(這是爲了使與只讀戰略2L緩存最好的情況下),現在我

+0

聽起來很有趣,2L只讀緩存策略到底有多精確? – stdcall