アノテーションを使用して、JPA2を使用して次のクラスのattributes
マップを永続化できるかどうか疑問に思っています。
public class Example {
long id;
// ....
Map<String, String> attributes = new HashMap<String, String>();
// ....
}
既に既存の本番データベースがあるため、理想的にはattributes
の値は次の既存のテーブルにマッピングできます。
create table example_attributes {
example_id bigint,
name varchar(100),
value varchar(100));
JPA 2.0は、@ElementCollection
コレクションのサポートと組み合わせて使用できるJava.util.Map
アノテーションを介してプリミティブのコレクションをサポートします。このような何かが動作するはずです:
@Entity
public class Example {
@Id long id;
// ....
@ElementCollection
@MapKeyColumn(name="name")
@Column(name="value")
@CollectionTable(name="example_attributes", joinColumns=@JoinColumn(name="example_id"))
Map<String, String> attributes = new HashMap<String, String>(); // maps from attribute name to value
}
@ElementCollection(fetch = FetchType.LAZY)
@CollectionTable(name = "raw_events_custom", joinColumns = @JoinColumn(name = "raw_event_id"))
@MapKeyColumn(name = "field_key", length = 50)
@Column(name = "field_val", length = 100)
@BatchSize(size = 20)
private Map<String, String> customValues = new HashMap<String, String>();
これは、列とテーブルの名前とフィールドの長さを制御してマップをセットアップする方法の例です。