hibernate之集合映射的属性详细解释
集合映射,总共有七种,最为常用的是list,set,map集合
1.map集合映射
private Map<String, String> address1 =new HashMap<String, String>();
get和set省略
map的配置
<!--map集合
key 指定外键
map-key 指定map的key
element 指定map的value
-->
<map name="address1" table="address1">
<key column="address_id"></key>
<map-key column="province" type="string"></map-key>
<element column="city" type="string"></element>
</map>
运行类
public void test_map_list() {
Session session = sf.openSession();
person p = new person();
p.setName("罗小姐");
p.getAddress1().put("1", "云南");
p.getAddress1().put("2", "普洱");
session.save(p);
Transaction tx = session.beginTransaction();
tx.commit();
}
2.list
po文件
private List<String> address2=new ArrayList<String>();//省略get和set方法
List的配置文件
list-index 指定的是排序列的名称 (因为要保证list集合的有序)
key 指定外键
element 指定该数据库的属性
<list name="address2" table="address_list">
<key column="uid"></key>
<list-index column="idx"></list-index>
<element column="city" type="string"></element>
</list>
运行类
@Test
public void test_list() {
Session session = sf.openSession();
person p=new person();
p.setName("叶小姐");
p.getAddress2().add("云南省");
p.getAddress2().add("楚雄市");
Transaction tx = session.beginTransaction();
session.save(p);
tx.commit();
session.close();
}
3.set
private Set<String> address;
//get,set方法省略
set配置
<set name="address">
<key column="address_id"></key>
<element column="addressname" type="string"></element>
</set>
最后完成运行类即可
public class app {
static SessionFactory sf;
static{
sf=new Configuration().configure().buildSessionFactory();
}
@Test
public void test_add_onetomany() {
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
person p = new person();
p.setName("林先生");
Set<String> address = new HashSet<String>();
address.add("东莞");
address.add("虎门");
p.setAddress(address);
session.save(p);
tx.commit();
session.close();
}
}
最后,做出一个总结:
集合映射的属性:1.table
2.schema:指定保存集合属性的数据表的schema的名称,用于覆盖在根元素中定义的schema属性
3.lazy:是否开启延迟加载,默认为true
4.inverse(字面意思:相反的)指定该集合作为双向关联关系中的另一端
5.cascade:指定当操作持久化对象时是否让操作联到子实体
6.order-by:该属性用于设置数据库对集合元素排序,该属性仅对1.4或者更高版本的jdk有效,意思是为字段加上asc或者desc关键字
7.sort:指定集合排序顺序
8.where:指定任意sql语句中的where条件,该条件将在加载或者删除集合元素时起作用,只有满足该sql查询时进行排序的,而不是直接在内存中排序
9.batch-size:定义延迟加载中每批抓取集合元素的数量。该数量默认为1.
10.access:指定hibernate访问集合属性的访问策略,默认为property
11.mutable:指定集合中的元素是否可变,如果指定该属性为false,则表明该集合元素不可变,在某些情况下可以进行一些小的性能优化。
12集合映射所拥有的属性:
12.1.list-index:list和数组的索引列
12.2.map-key: map集合和基本数据类型的索引列
12.3.map-key-many-to-many: map集合和实体引用类型的索引列
12.4.composite-map-key: map集合和复合数据类型的索引列
12.5.element 当集合元素是基本类型以及其包装类型,字符串,日期类型时使用该元素。
12.6.composite-element 当集合元素时复合类型时使用该元素
12.7.one-to-many或者many-to-one: 当集合元素是其他持久化对象的引用时使用它们。也就是说这两个元素主要用于关联关系映射。
集合映射,总共有七种,最为常用的是list,set,map集合
1.map集合映射
private Map<String, String> address1 =new HashMap<String, String>();
get和set省略
map的配置
<!--map集合
key 指定外键
map-key 指定map的key
element 指定map的value
-->
<map name="address1" table="address1">
<key column="address_id"></key>
<map-key column="province" type="string"></map-key>
<element column="city" type="string"></element>
</map>
运行类
public void test_map_list() {
Session session = sf.openSession();
person p = new person();
p.setName("罗小姐");
p.getAddress1().put("1", "云南");
p.getAddress1().put("2", "普洱");
session.save(p);
Transaction tx = session.beginTransaction();
tx.commit();
}
2.list
po文件
private List<String> address2=new ArrayList<String>();//省略get和set方法
List的配置文件
list-index 指定的是排序列的名称 (因为要保证list集合的有序)
key 指定外键
element 指定该数据库的属性
<list name="address2" table="address_list">
<key column="uid"></key>
<list-index column="idx"></list-index>
<element column="city" type="string"></element>
</list>
运行类
@Test
public void test_list() {
Session session = sf.openSession();
person p=new person();
p.setName("叶小姐");
p.getAddress2().add("云南省");
p.getAddress2().add("楚雄市");
Transaction tx = session.beginTransaction();
session.save(p);
tx.commit();
session.close();
}
3.set
private Set<String> address;
//get,set方法省略
set配置
<set name="address">
<key column="address_id"></key>
<element column="addressname" type="string"></element>
</set>
最后完成运行类即可
public class app {
static SessionFactory sf;
static{
sf=new Configuration().configure().buildSessionFactory();
}
@Test
public void test_add_onetomany() {
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
person p = new person();
p.setName("林先生");
Set<String> address = new HashSet<String>();
address.add("东莞");
address.add("虎门");
p.setAddress(address);
session.save(p);
tx.commit();
session.close();
}
}
最后,做出一个总结:
集合映射的属性:1.table
2.schema:指定保存集合属性的数据表的schema的名称,用于覆盖在根元素中定义的schema属性
3.lazy:是否开启延迟加载,默认为true
4.inverse(字面意思:相反的)指定该集合作为双向关联关系中的另一端
5.cascade:指定当操作持久化对象时是否让操作联到子实体
6.order-by:该属性用于设置数据库对集合元素排序,该属性仅对1.4或者更高版本的jdk有效,意思是为字段加上asc或者desc关键字
7.sort:指定集合排序顺序
8.where:指定任意sql语句中的where条件,该条件将在加载或者删除集合元素时起作用,只有满足该sql查询时进行排序的,而不是直接在内存中排序
9.batch-size:定义延迟加载中每批抓取集合元素的数量。该数量默认为1.
10.access:指定hibernate访问集合属性的访问策略,默认为property
11.mutable:指定集合中的元素是否可变,如果指定该属性为false,则表明该集合元素不可变,在某些情况下可以进行一些小的性能优化。
12集合映射所拥有的属性:
12.1.list-index:list和数组的索引列
12.2.map-key: map集合和基本数据类型的索引列
12.3.map-key-many-to-many: map集合和实体引用类型的索引列
12.4.composite-map-key: map集合和复合数据类型的索引列
12.5.element 当集合元素是基本类型以及其包装类型,字符串,日期类型时使用该元素。
12.6.composite-element 当集合元素时复合类型时使用该元素
12.7.one-to-many或者many-to-one: 当集合元素是其他持久化对象的引用时使用它们。也就是说这两个元素主要用于关联关系映射。