我有一个xml文件,其中我有一些键值对.我想以键值对的形式存储它们
<parent>
<key1> value </1key>
<key1> value </1key>
<key1> value </1key>
<key1> value </1key>
...
<key1> value </1key>
</parent>
Run Code Online (Sandbox Code Playgroud)
现在我不知道有多少关键值将提前来自xml.如何将它映射到hibernate对象?我可以把它放在桌子里
primaryKey parentId key value
1 1 k1 val
2 1 k2 val
3 1 k3 val
4 2 k1 val
5 2 k2 val
6 3 k3 val
Run Code Online (Sandbox Code Playgroud)
我怎样才能将它映射到hibernate对象?我想要跟随结构类Parent {int parentId; String parent Name KeyValue keyval; //我如何建模?
}
AM使用netbeans IDE.
你可能确实使用了一张地图:
public class Parent {
@Id
private Integer id;
@OneToMany(mappedBy = "parent")
@MapKey(name = "key")
private Map<String, KeyValuePair> keyValuePairs;
}
public class KeyValuePair {
@Id
private Integer id;
@ManyToOne
@JoinColumn(name = "parent_id")
private Parent parent;
@Column(name = "key")
private String key;
@Column(name = "value")
private String value;
}
Run Code Online (Sandbox Code Playgroud)
您还应该有一个独特的约束[parent_id - key].
小智 5
您也可以直接映射到表,而无需创建KeyValuePair类
对于键值对存储在MY_MAP_TABLE中并定义为名为“设置”的属性的地图属性:
定义属性:
@ElementCollection (fetch=FetchType.EAGER)
@CollectionTable(name="MY_MAP_TABLE" , joinColumns=@JoinColumn(name="ID"))
@MapKeyColumn(name="name")
@Column(name="value")
public Map<String, String> getSettings() {
return settings;
}
Run Code Online (Sandbox Code Playgroud)
和存储地图的表:
CREATE TABLE MY_MAP_TABLE (
ID NUMBER not null REFERENCES MY_PARENT_TABLE(ID),
NAME VARCHAR2(256) not null,
VALUE VARCHAR2(256) not null,
PRIMARY KEY (ID , NAME)
);
Run Code Online (Sandbox Code Playgroud)
如果 KeyValuePair 由 Parent 严格私有,那么更好的方法是:
@Entity
public class Parent {
@Id
@GeneratedValue
private long id;
@ElementCollection(fetch=FetchType.EAGER)
@MapKeyColumn(name="key")
@CollectionTable(name="keyvaluepair", joinColumns= @JoinColumn(name="id"))
private Map<String, KeyValuePair> keyValuePairMap =
new HashMap<String, KeyValuePair>();
//getter and setter methods
}
@Embeddable
public class KeyValuePair {
//no need of declaring key
//key column will be created by MapKeyColumn
private String value;
//getter and setter methods
}
Run Code Online (Sandbox Code Playgroud)
在这种方法中,KeyValuePair 始终与其父项一起持久化、合并、删除。
参考:
| 归档时间: |
|
| 查看次数: |
8165 次 |
| 最近记录: |