多对一
案列 从domain和映射文件开始写
懒加载的解决
3、open 过滤器
pojo
package net.hibernate.pojo;
public class EMP_0511 implements java.io.Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private Dept_0511 dept;
public EMP_0511() {
}
public EMP_0511(String name) {
this.name = name;
}
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 Dept_0511 getDept() {
return dept;
}
public void setDept(Dept_0511 dept) {
this.dept = dept;
}
}
package net.hibernate.pojo;
import java.util.HashSet;
import java.util.Set;
public class Dept_0511{
private Integer id;
private String name;
private Set<EMP_0511> emps=new HashSet<EMP_0511>();
public Dept_0511() {
}
public Dept_0511(String name) {
this.name = name;
}
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 Set<EMP_0511> getEmps() {
return emps;
}
public void setEmps(Set<EMP_0511> emps) {
this.emps = emps;
}
}
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="net.hibernate.pojo">
<class name="EMP_0511">
<id name="id" type="integer">
<generator class="native"/>
</id>
<property name="name" type="string">
</property>
<!--dept属性用来说明与 雇员和部门类之间的多对1关系 本方有外键 deptid -->
<many-to-one name="dept" class="Dept_0511" column="deptId"></many-to-one>
</class>
</hibernate-mapping>
<?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="net.hibernate.pojo">
<class name="Dept_0511" >
<id name="id">
<generator class="native"/>
</id>
<property name="name">
<column name="name" length="64" not-null="true"></column>
</property>
<!-- set集合用来说明部门和雇员一对多的关系有 deptId -->
<set name="emps">
<key column="deptId"></key>
<one-to-many class="EMP_0511"/>
</set>
</class>
</hibernate-mapping>
测试
package net.hibernate.view;
import java.util.Date;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;
import net.hibernate.pojo.Dept_0511;
import net.hibernate.pojo.EMP_0511;
import net.hibernate.view.util.HibernateUtil;
public class TestMain {
public static void main(String[] args) {
// 完成crud操作
//一对多,多对一
// insertEmp();
//懒加载,因为session关闭,拿不到getdept的值,有三种方法解决
EMP_0511 emp=selectByOne();
System.out.println(emp.getDept().getName());
}
public static void insertEmp() {
Session session = HibernateUtil.getSession();
// 事务
Transaction tr = session.beginTransaction();
try {
// 在构造两个员工
EMP_0511 emp = new EMP_0511();
emp.setName("苏东坡");
EMP_0511 emp1 = new EMP_0511();
emp1.setName("秦观");
Dept_0511 dept = new Dept_0511();
// 构造一个部门对象
dept.setName("文化部");
// 告诉部门你有2个员工
dept.getEmps().add(emp);
dept.getEmps().add(emp);
// 告诉员工属于那个部门
emp.setDept(dept);
emp1.setDept(dept);
// 保存、提交
session.save(dept);
session.save(emp);
session.save(emp1);
tr.commit();
} catch (Exception e) {
e.printStackTrace();
if (tr != null) {
tr.rollback();
}
} finally {
if (tr != null && session.isOpen()) {
session.close();
}
}
}
public static void updateEmp(){
//1、获取 2、修改
Session session=HibernateUtil.getSession();
Transaction tr=session.beginTransaction();
// 第一种方法获取
// Employee emp=(Employee) session.get(Employee.class, 1);
EMP_0511 emp=(EMP_0511) session.load(EMP_0511.class, 1);
emp.setName("苏轼");
tr.commit();
session.close();
}
public static void deleteEmp(){
//1、获取 2、删除
Session session=HibernateUtil.getSession();
Transaction tr=session.beginTransaction();
// 第一种方法获取
// Employee emp=(Employee) session.get(Employee.class, 1);
EMP_0511 emp=(EMP_0511) session.load(EMP_0511.class, 2);
session.delete(emp);
tr.commit();
session.close();
}
public static EMP_0511 selectByOne(){
Session session = HibernateUtil.getSession();
// 事务
Transaction tr = session.beginTransaction();
EMP_0511 emo=null;
try {
emo=(EMP_0511) session.get(EMP_0511.class,9);
Hibernate.initialize(emo.getDept());
} catch (Exception e) {
e.printStackTrace();
if (tr != null) {
tr.rollback();
}
} finally {
if (tr != null && session.isOpen()) {
session.close();
}
}
return emo;
}
}