集合映射-Map
键值对映射模型
Map
表结构
items_map(父表)
CREATE TABLE items_map(
id NUMBER(10) PRIMARY KEY,
name VARCHAR2(20)
);
images_map(子表)
不设置主键,使用两个栏位作为联合主键
CREATE TABLE images_map(
image_name VARCHAR2(20) NOT NULL,
filename VARCHAR2(20) NOT NULL,
items_id NUMBER(10) REFERENCES items_map(id),
PRIMARY KEY(items_id, image_name)
);
类结构
可以看出,Map里存储的都是值类型的键值对。适时,key为image_name,filename为filename。
public class ItemsMap{
private Long id;
private String name;
private Map<String, String> images = new HashMap<String, String>();
......
}
映射文件
map标签:配置子表
key标签:配置子表外键
map-key:配置map中的key元素对应的栏位
element:实际上就是map-value,配置map中的值,因为这里是值类型(String),所以我们使用element元素,如果我们要使用实体类型,则应该使用one-to-many或者one-to-one元素
<class name="ItemsMap" table="ITEMS_MAP">
...
<map name="images" table="IMAGES_MAP" cascade="all" inverse="false">
<key column="ITEMS_ID" type="long"/>
<map-key type="string" column="IMAGE_NAME"/>
<element column="FILENAME" type="string" not-null="true"/>
</map>
</class>
集合映射小结
对象模型用的是Set类型的集合,映射文件用的是<set>元素
对象模型用的是List集合,如果想维护元素的顺序,单独向表中添加一列,可用<lists>元素。如果不希望维护元素的顺序,没有单独的一列,可以使用<bag>或者<idbag>元素。
对象模型是Map集合,映射文件用的是<map>元素。
List集合在映射时单独多了一列是为了维护元素的顺序,可以有重复值。