按查询及存取速率来说的一对多用的相对多对一少一些,这里只写主要配置文件的代码
首先是hibernate的配置文件
<!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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///webproject</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<mapping resource="com/shaoxin/entity/Dept.hbm.xml"/>
<mapping resource="com/shaoxin/entity/Employee.hbm.xml"/>
</session-factory>
</hibernate-configuration>
一对多的配置文件代码,很明显使用到了set集合
<?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.shaoxin.entity">
<class name="Dept" table="dept">
<id name="deptid" column="deptid">
<generator class="native"></generator>
</id>
<property name="deptName" column="deptname"></property><!--
一对多设置外键方式,class代表外键类型
--><set name="setEmployees" table="employee">
<key column="dept_id"></key>
<one-to-many class="Employee"/>
</set>
</class>
</hibernate-mapping>
对应的实体类:
package com.shaoxin.entity;
import java.util.HashSet;
import java.util.Set;
public class Dept {
private int deptid;
private String deptName;
private Set<Employee> setEmployees = new HashSet<Employee>();
public int getDeptid() {
return deptid;
}
public void setDeptid(int deptid) {
this.deptid = deptid;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public Set<Employee> getSetEmployees() {
return setEmployees;
}
public void setSetEmployees(Set<Employee> setEmployees) {
this.setEmployees = setEmployees;
}
}
多对一的配置文件代码,很明显是一个对象类型
<?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.shaoxin.entity">
<class name="Employee" table="employee">
<id name="employeeid" column="employeeid">
<generator class="native"></generator>
</id>
<property name="employeeName" column="employeename"/><!--
多对一创建外键方式:属性分别为:外键对应的表,外键字段,外键类型
--><many-to-one name="dept" column="dept_id" class="Dept"></many-to-one>
</class>
</hibernate-mapping>
对应的实体类
package com.shaoxin.entity;
public class Employee {
private int employeeid;
private String employeeName;
private Dept dept;
public int getEmployeeid() {
return employeeid;
}
public void setEmployeeid(int employeeid) {
this.employeeid = employeeid;
}
public String getEmployeeName() {
return employeeName;
}
public void setEmployeeName(String employeeName) {
this.employeeName = employeeName;
}
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
}
测试这两个存储方式
package com.shaoxin.entity;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.junit.Test;
public class TestMany2Many {
static SessionFactory sf;
static {
sf = new Configuration().configure().buildSessionFactory();
}
@Test
public void testOne2Many() throws Exception {
Session openSession = sf.openSession();
Transaction beginTransaction = openSession.beginTransaction();
Employee empzs = new Employee();
Employee empls = new Employee();
empls.setEmployeeName("李四");
empzs.setEmployeeName("张三");
Dept dept = new Dept();
dept.getSetEmployees().add(empls);
dept.getSetEmployees().add(empzs);
dept.setDeptName("应用开发");
openSession.save(empls);
openSession.save(empzs);
openSession.save(dept);
beginTransaction.commit();
openSession.close();
}
@Test
public void testMany2One() throws Exception {
Session openSession = sf.openSession();
Transaction beginTransaction = openSession.beginTransaction();
Employee empzs = new Employee();
Employee empls = new Employee();
Dept dept = new Dept();
dept.setDeptName("应用开发");
empls.setEmployeeName("李四");
empzs.setEmployeeName("张三");
empls.setDept(dept);
empzs.setDept(dept);
openSession.save(dept);
openSession.save(empls);
openSession.save(empzs);
beginTransaction.commit();
openSession.close();
}
}