实例的准备工作请看:http://write.blog.csdn.net/postedit/48010949
==========》复合主键映射
1、在src建立com.hibernate.test4包,并建立Area.java、Area.hbm.xml,并且把Area.hbm.xml添加到hibernate.cfg.xml中。
area表的sql为:CREATE TABLE area(province varchar(15) not null,village varchar(15) not null,income float not null,primary key(province,village));
Area.java
package com.hibernate.test4;
import java.io.Serializable;
public class Area implements Serializable{
private String province;
private String village;
private float income;
public Area() {
super();
// TODO Auto-generated constructor stub
}
此处省略get、set方法
}
Area.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2015-10-2 9:52:03 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.hibernate.test4.Area" table="AREA">
<composite-id>
<key-property name="province" column="province" type="string"></key-property>
<key-property name="village" column="village" type="string"></key-property>
</composite-id>
<property name="income" type="float">
<column name="INCOME" />
</property>
</class>
</hibernate-mapping>
2、建立测试类Test1,测试运行结果。
package com.hibernate.test4;
import static org.junit.Assert.*;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
public class Test1 {
@Test
public void test() {
Session session=null;
Transaction tx=null;
try {
session=HibernateUtil.getSessionFactory().openSession();
tx=session.beginTransaction();
Area area=new Area();
area.setProvince("云南省");
area.setVillage("花甲村");
area.setIncome(100000);
session.save(area);
tx.commit();
} catch (RuntimeException e) {
// TODO Auto-generated catch block
try {
tx.rollback();
} catch (RuntimeException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}finally{
session.close();
}
}
}
运行结果:
Hibernater输出sql:insert into AREA (INCOME, province, village) values (?, ?, ?)
复合主键映射的类必须要继承Serializable接口,否则会抛出异常
==========》Set映射
1、建立PersonImg.java、Person.java,与及Person.hbm.xml
Person表的sql为:CREATE TABLE Person(PersonId int not null primary key,Personname varchar(15) not null,Personage int not null);
Person.java
package com.hibernate.test4;
import java.util.HashSet;
import java.util.Set;
public class Person {
private int PersonId;
private String Personname;
private int Personage;
private Set<String> personImage=new HashSet<String>();
public Person() {
super();
// TODO Auto-generated constructor stub
}
此处省略get、set方法
}
Person.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2015-10-2 14:13:34 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.hibernate.test4.Person" table="PERSON">
<id name="PersonId" type="int">
<column name="PERSONID" />
<generator class="assigned" />
</id>
<property name="Personname" type="java.lang.String">
<column name="PERSONNAME" />
</property>
<property name="Personage" type="int">
<column name="PERSONAGE" />
</property>
<set name="personImage" table="PERSONIMG">
<key column="PersonId">
</key>
<element type="string" column="Image"></element>
</set>
</class>
</hibernate-mapping>
PersonImg.java
package com.hibernate.test4;
public class PersonImg {
private int PersonId;
private String Image;
public PersonImg() {
super();
// TODO Auto-generated constructor stub
}
此处省略get、set方法
}
***********这里并不需要建立PersonImg.hbm.xml
2、建立测试类Test1.java进行测试
package com.hibernate.test4;
import static org.junit.Assert.*;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
public class Test1 {
@Test
public void test() {
Session session=null;
Transaction transaction=null;
try {
session=HibernateUtil.getSessionFactory().openSession();
transaction=session.beginTransaction();
Person person=new Person();
person.setPersonage(20);
person.setPersonname("mrw");
person.getPersonImage().add("1.jpg");
person.getPersonImage().add("2.jpg");
session.save(person);
transaction.commit();
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
session.close();
}
}
}
运行结果:
Hibernate输出sql:
insert into PERSON (PERSONNAME, PERSONAGE, PERSONID) values (?, ?, ?)
insert into PERSONIMG (PersonId, Image) values (?, ?)
insert into PERSONIMG (PersonId, Image) values (?, ?)