001-List,数组,Set,Map属性的映射
hibernate.cfg.xml:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">mysqladmin</property>
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<mapping resource="sqlmap/News.hbm.xml"/>
<mapping resource="sqlmap/Person.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Person.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.amazing.hibernate.domain"> <class name="Person" table="person">
<id name="id" type="integer" column="ID">
<generator class="identity"/>
</id>
<property name="name" type="string" column="name"/>
<property name="age" type="integer" column="age"/>
<list name="schools" table="school">
<key column="personId"/>
<list-index column="listIndex"/>
<element type="string" column="schoolName"/>
</list>
</class> </hibernate-mapping>
Person.java:
package com.amazing.hibernate.domain; import java.util.ArrayList;
import java.util.List; public class Person { private Integer id;
private String name;
private int age;
private List<String> schools = new ArrayList<String>(); public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<String> getSchools() {
return schools;
}
public void setSchools(List<String> schools) {
this.schools = schools;
} }
TestList.java:
package com.amazing.hibernate.domain; import java.util.ArrayList;
import java.util.List; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; public class TestList { @Test
public void testListMapping(){
Configuration conf = new Configuration().configure();
SessionFactory sf = conf.buildSessionFactory();
Session session = sf.getCurrentSession();
Transaction txt = session.beginTransaction(); Person p1 = new Person();
p1.setName("tom");
p1.setAge(24);
List<String> schools1 = new ArrayList<String>();
schools1.add("小学");
schools1.add("初中");
p1.setSchools(schools1);
session.save(p1); Person p2 = new Person();
p2.setName("jack");
p2.setAge(28);
List<String> schools2 = new ArrayList<String>();
schools2.add("高中");
schools2.add("大学");
p2.setSchools(schools2);
session.save(p2); txt.commit();
System.out.println("session.isOpen():"+session.isOpen());//false
System.out.println("sf.isClosed():"+sf.isClosed());//false
sf.close();
}
}

若schools为String数组类型,即private String[] schools.映射文件Person.hbm.xml只需要将list元素改为array即可。
若schools为Set类型,即private Set<String> schools.映射文件Person.hbm.xml稍作修改:
<set name="schools" table="school">
<key column="personId"/>
<element type="string" column="schoolName" not-null="true"/>
</set>

若Person类有一个Map属性,即private Map<String,Float> scores.映射文件Person.hbm.xml稍作修改:
<map name="scores" table="score">
<key column="personId" not-null="true"/>
<map-key column="subject" type="string"/>
<element column="grade" type="float"/>
</map>
package com.amazing.hibernate.domain; import java.util.HashMap;
import java.util.Map; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; public class TestDemo { @Test
public void testListMapping(){
Configuration conf = new Configuration().configure();
SessionFactory sf = conf.buildSessionFactory();
Session session = sf.getCurrentSession();
Transaction txt = session.beginTransaction(); Person p = new Person();
p.setName("tom");
p.setAge(24);
Map<String,Float> scores = new HashMap<String,Float>();
scores.put("语文", 85f);
scores.put("数学", 92f);
p.setScores(scores);
session.save(p); txt.commit();
System.out.println("session.isOpen():"+session.isOpen());
System.out.println("sf.isClosed():"+sf.isClosed());
sf.close();
}
}

001-List,数组,Set,Map属性的映射的更多相关文章
- Hibernate学习---第六节:数组&list&map&set的映射配置
1.实体类,代码如下: package learn.hibernate.bean; import java.util.Date; import java.util.HashMap; import ja ...
- 数组方法map(映射),reduce(规约),foreach(遍历),filter(过滤)
数组方法map(映射),reduce(规约),foreach(遍历),filter(过滤) map()方法返回一个由原数组中每一个元素调用一个指定方法后返回的新数组 reduce()方法接受一个函数作 ...
- Hibernate映射Map属性2
Hibernate在映射Map属性时生成映射文件.需要注意的一些地方.下面是我的一个例子. Java类如下 public class NameAndNumber { private Integer i ...
- Hibernate映射Map属性
看到一篇Hibernate 映射Map属性的文章挺好的转载一下原地址:http://blog.sina.com.cn/s/blog_86f4502c0101fs1x.html Map集合属于有序集合, ...
- java bean、List、数组、map和Json的相互转化
工程 json包为 代码 package com.my.json; public class ChildBean { private String childName; private String ...
- 第9章 集合处理(数组、Map、Set)
目录 1. 数组 1.1 创建数组 1.2 在数组两端添加删除元素 1.3 在数组任意位置添加.删除元素 delete删除数组元素无效 使用splice方法增.删.改元素 1.4 数组的常用操作 数组 ...
- JavaScript中数组类型的属性和方法
除了Object,Array类型应该是ECMAScript中最常用的类型了. ECMAScript的数组虽然也是数据的有序列表,但还是与其他语言中的数组有很大的区别.比如ECMAScript数组每一项 ...
- javascript数组的实例属性(方法)
javascript的所有数组实例对象,除了可以给自己增删属性之外:都会从Array.prototype继承属性(方法).修改Array的原型会影响所有的数组实例. 数组实例的属性: Array.pr ...
- MyBatis传入参数为list、数组、map写法(转载)
MyBatis传入参数为list.数组.map写法 1.foreach简单介绍: foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有item ...
随机推荐
- python产生随机值-random模块
import random产生随机值的模块random.random() #获取一个随机的浮点值;help(random.random) #查看随机范围:0-1;random.uniform(1,10 ...
- MyBatis入门一
本人只是刚刚学习MyBatis,作为学习路程的记录,写的不好,不完善的地方请多多包涵: 首先,先比较一下Hibernate和MyBatis两种框架之间的区别: 两种都是ORM框架,但是Hibernat ...
- 第6章 MSI和MSI-X中断机制
在PCI总线中,所有需要提交中断请求的设备,必须能够通过INTx引脚提交中断请求,而MSI机制是一个可选机制.而在PCIe总线中,PCIe设备必须支持MSI或者MSI-X中断请求机制,而可以不支持IN ...
- 关于编译FFMPEG的初级教程
首先我们要下载相关工具,这里不多说,大家按照我的地址去下载文件就好了 MINGW下载地址:http://prdownloads.sourceforge.net/mingw/MinGW-3.1.0-1. ...
- Extjs 4.0 Window
1.JSON代码 Ext.MyWindow=Ext.extend(Ext.Window ,{ xtype:"window", title:"我的窗口", wid ...
- NetBeans部署项目(Extjs)报错(二)
NetBeans部署项目(Extjs)报错(二) 1.具体错误如下: Using CATALINA_BASE: "C:\Users\Administrator.FOXB2MKB3RGUNIL ...
- dijit.byId("grid") is undefined
1.错误描述 TypeError:dijit.byId(...) is undefined (68 out of range 3) 2.错误原因 var gridName = dijit ...
- 芝麻HTTP:Python爬虫进阶之Scrapy框架安装配置
初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此整理如下. Windows 平台: 我的系统是 ...
- 版本控制工具--svn和git的使用(三) -----git的使用(1)
安装 git官网就有git各个系统的安装包,可以根据自己系统安装相应的安装包.window的git安装包 依据国内网速原因,将安装放到网盘里,链接: https://pan.baidu.com/s/1 ...
- 异常-----freemarker.core.ParseException: Encountered "string"
1.错误描述 freemarker.core.ParseException: Encountered "string" at line 21, column 21 in type. ...