2011-11-10 5 views
1

私はJDBCプロジェクトをHibernateに移行中です。 私のDBに格納されている参照データに関する質問があります。perticularでそれは国の国のリストです。 私はhereから取った。休止状態の国表現

私はJDBCを使用していたときに、そのデータを保持するテーブルを持っていましたが、これを使用してDBのデータを検証していました。例えば、ユーザーは、そのテーブルに存在しない国に住んでいると入力することはできませんでした。

私は人間を表すPojoを持っています。私は国を表す文字列メンバを持っています。どのようにHibernateでそれを保持するのですか?国のためにPojoを作成する必要はありますか? 以下のコードをpojoではない「参照テーブル」にどのように参照できますか?

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

上記のコードは、私が書いたものですが、これを行う方法であるかどうかはわかりません。

+0

(これは読み取り専用の戦略と2Lキャッシュを有効にするための最良のケースである)今私はテーブルの国に国のPOJOをマッピングし、また不変にこのエンティティを設定し、同様に2Lキャッシュを有効にもっと混乱した後に... – stdcall

答えて

4

idとしてisoコードを使用して、Countryクラスを作成することをお勧めします。

多くの人が1つの国に存在できるので、多対1の関係を設定する必要があります。

国:

@Id 
String id; 

者:そのようにし

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

、あなたが休止状態を使用してコレクションとして、すべての国を読み込むことができ、あなたは=オプションのように(関係のルールを設定することができますfalseなど)

1

このような状況では、以下のアプローチを実行できます。実行時にCountryテーブルを挿入しないことが前提です。

PersonクラスにcountryIdのフィールドがあります。

@Column(name = "country_iso") 
private String countryId; 

あなたは(データベースから)国名に応じたcountryIdを取得し、PersonのcountryIdに設定したデータベースPersonを保存したいです。次にPersonを保存します。

POJOをCountryに設定し、必要に応じてPersonクラスを参照することができます。

3

国のエンティティを作成することをお勧めします。

このマッピングで3210

、あなたが

+0

2L読み込み専用キャッシュ戦略はどのように正確に機能しますか? – stdcall