hibernate的一对多和多对一关系映射
2012-07-26 10:24
302 查看
//dep.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">
<hibernate-mapping
package="com.total">
<class name="Dep">
<id name="depId">
<generator class="native"></generator>
</id>
<property name="depName"></property>
<!-- 关系 -->
<!--name表示部门表中有很多员工,class表示emps表示的类型,key是外键,它必须跟主表中的外键的名字一样,正是根据外键才能找到员工的 -->
<set name="emps" cascade="save-update">
<key column="depId"></key>
<one-to-many class="com.total.Emp"/>
</set>
</class>
</hibernate-mapping>
//emp.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">
<hibernate-mapping
package="com.total">
<class name="Emp" >
<id name="empId">
<generator class="native"></generator>
</id>
<property name="empName"></property>
<many-to-one not-null="true" cascade="all" name="dep" column="depId" ></many-to-one><!--depId是外键的字段名,dep是外键的对象表示形式,cascede表示的级联,not-null表示外键不能为空 -->
</class>
</hibernate-mapping>
//Dep的代码
import java.util.HashSet;
import java.util.Set;
public class Dep {
private String depName;
private Integer depId;
private Set<Emp> emps = new HashSet<Emp>();
public String getDepName() {
return depName;
}
public void setDepName(String depName) {
this.depName = depName;
}
public Integer getDepId() {
return depId;
}
public void setDepId(Integer depId) {
this.depId = depId;
}
public Set<Emp> getEmps() {
return emps;
}
public void setEmps(Set<Emp> emps) {
this.emps = emps;
}
}
///Emp的代码
public class Emp {
private String empName;
private Integer empId;
private Dep dep;
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public Integer getEmpId() {
return empId;
}
public void setEmpId(Integer empId) {
this.empId = empId;
}
public Dep getDep() {
return dep;
}
public void setDep(Dep dep) {
this.dep = dep;
}
}
//这是hibernate.cfg.xml的代码
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="foo">
<property name="show_sql">true</property>
<property name="myeclipse.connection.profile">mysql</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/hibernate
</property>
<property name="connection.username">root</property>
<property name="connection.password">caohuan</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="com/total/Dep.hbm.xml" />
<mapping resource="com/total/Emp.hbm.xml" />
</session-factory>
</hibernate-configuration>
//这是hibernateUtil的代码
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static SessionFactory factory;
private HibernateUtil(){};
static{
Configuration configuration = new Configuration().configure();
factory = configuration.buildSessionFactory();
}
public static SessionFactory getSessionFactory()
{
return factory;
}
public static Session getSession()
{
return factory.openSession();
}
}
//这是测试的代码
import java.util.Set;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class Main {
public static void main(String[] args) {
Session session = HibernateUtil.getSession();
Transaction transaction = session.beginTransaction();
/*Dep dep = new Dep();
dep.setDepName("a");
Emp emp = new Emp();
emp.setEmpName("张三");
emp.setDep(dep);
session.save(dep);
session.save(emp);
transaction.commit();
session.close();*/
/*Dep dep = new Dep();
dep.setDepName("liaonanbu");
Emp emp1 = new Emp();
emp1.setDep(dep);
emp1.setEmpName("李四");
Emp emp2 = new Emp();
emp2.setEmpName("李四");
emp2.setDep(dep);
session.save(dep);
session.save(emp1);
session.save(emp2);
emp1.setEmpName("caohuan");//这是持久化对象,hibernate会自动进行处理(即进行更新操作)
transaction.commit();
session.close();*/
//Emp emp = (Emp) session.get(Emp.class, 1);
//System.out.println(emp.getDep().getDepName());
/*Dep dep = (Dep) session.get(Dep.class, 1);
Set<Emp> emps = dep.getEmps();
for (Emp emp : emps) {
System.out.println(emp.getEmpName());
}*/
Dep dep = new Dep();
dep.setDepName("b");
Emp emp = new Emp();
emp.setEmpName("张三123");
emp.setDep(dep);
//dep.getEmps().add(emp);//部门里面增加一个员工
// Hibernate.initialize(emp.getDep());
session.save(emp);
transaction.commit();
session.close();
}
}
//这是第二个例子
//Dept.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 类和表的关系 -->
<class name="com.pojos.Dept" table="dept">
<!-- 主键 -->
<id name="depid" column="depid">
<generator class="native"></generator>
</id>
<!-- 其它字段 -->
<property name="depname" column="depname"></property>
<!-- 关系 key是外键名字
cascade=delete级联删除,删除主表时,子表也删除
cascade=save-update 级联添加
cascade=all (级联删除和添加)
cascade=none(默认,不级联)
-->
<set name="emps" cascade="delete,save-update">
<key column="depid"></key>
<one-to-many class="com.pojos.Emp"/>
</set>
</class>
</hibernate-mapping>
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
public class Dept implements Serializable {
private int depid;// 部门id
private String depname; // 部门名称
private Set emps = new HashSet();// 多个员工
public int getDepid() {
return depid;
}
public void setDepid(int depid) {
this.depid = depid;
}
public String getDepname() {
return depname;
}
public void setDepname(String depname) {
this.depname = depname;
}
public Set getEmps() {
return emps;
}
public void setEmps(Set emps) {
this.emps = emps;
}
}
//Emp.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 类和表的映射 -->
<class name="com.pojos.Emp" table="emp">
<!-- 主键策略 -->
<id name="empid" column="empid">
<generator class="native"></generator>
</id>
<!-- 其它字段 -->
<property name="empname" column="empname"></property>
<!-- 关系(多个员工对应一个部门) -->
<many-to-one name="dep" column="depid">
</many-to-one>
</class>
</hibernate-mapping>
import java.io.Serializable;
public class Emp implements Serializable {
// 员工编号
private int empid;
// 员工姓名
private String empname;
// 所在部门
private Dept dep;
public int getEmpid() {
return empid;
}
public void setEmpid(int empid) {
this.empid = empid;
}
public String getEmpname() {
return empname;
}
public void setEmpname(String empname) {
this.empname = empname;
}
public Dept getDep() {
return dep;
}
public void setDep(Dept dep) {
this.dep = dep;
}
}
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.sun.faces.el.FacesCompositeELResolver;
/*
* 工具类,获取session
*/
public class HibernateSessionFactory {
//读取总的配置文件
static Configuration cfg = new Configuration().configure();
//创建session工厂
static SessionFactory factory = cfg.buildSessionFactory();
//创建session
public static Session getSession(){
return factory.openSession();
}
}
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class 创建表 {
/**
* @param args
*/
public static void main(String[] args) {
Configuration cfg = new Configuration().configure();
SchemaExport export = new SchemaExport(cfg);
//是否显示sql,是否执行sql
export.create(true, true);
}
}
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.pojos.Dept;
public class 添加一个新部门 {
/**
* @param args
*/
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
Dept dept = new Dept();
dept.setDepname("了男部");
// 开启事务
Transaction tr = session.beginTransaction();
try {
session.save(dept);
tr.commit();
} catch (Exception e) {
e.printStackTrace();
tr.rollback();
} finally {
session.close();
}
}
}
import java.util.Set;
import org.hibernate.Session;
import com.pojos.Dept;
import com.pojos.Emp;
public class 输出1号部门所有员工 {
/**
* @param args
*/
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
//查找1号部门
Dept dept = (Dept) session.get(Dept.class, 1);
//得到这个部门所有员工
Set<Emp> set = dept.getEmps();
for (Emp emp : set) {
System.out.println(emp.getEmpname());
}
}
}
import java.util.List;
import java.util.Set;
import org.hibernate.Query;
import org.hibernate.Session;
import com.pojos.Dept;
import com.pojos.Emp;
public class 输出1号部门所有员工二 {
/**
* @param args
*/
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
String hql = "from Emp e where e.dep=?";
Query query = session.createQuery(hql);
query.setParameter(0, 1);
List<Emp> list = query.list();
for (Emp emp : list) {
System.out.println(emp.getEmpname());
}
}
}
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.pojos.Dept;
import com.pojos.Emp;
public class 添加新员工方法二 {
/**
* @param args
*/
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
// 查找一号部门
Dept dept = (Dept) session.load(Dept.class, 1);
// 添加新员工
Emp emp = new Emp();
emp.setEmpname("李四");
dept.getEmps().add(emp);
Transaction tr = session.beginTransaction();
try {
session.save(emp);
tr.commit();
} catch (Exception e) {
tr.rollback();
e.printStackTrace();
} finally {
session.close();
}
}
}
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.pojos.Dept;
import com.pojos.Emp;
public class 添加新员工方法一 {
/**
* @param args
*/
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
// 查找一号部门
Dept dept = (Dept) session.load(Dept.class, 1);
// 添加新员工
Emp emp = new Emp();
emp.setEmpname("张三");
emp.setDep(dept); //效率高
Transaction tr = session.beginTransaction();
try {
session.save(emp);
tr.commit();
} catch (Exception e) {
tr.rollback();
e.printStackTrace();
} finally {
session.close();
}
}
}
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.pojos.Dept;
public class 级联删除 {
/**
* @param args
* 级联:主表操作时,子表也操作 可以有:级联删除和级联添加 级联删除:删除主表,从表自动删除 级联添加:同时添加主表和从表
* 在默认的情况,不支持级联,要修改映射文件
* 注意:HQL不支持级联
*/
public static void main(String[] args) {
// 查找1号部门
Session session = HibernateSessionFactory.getSession();
Dept dept = (Dept) session.load(Dept.class, 1);
Transaction tr = session.beginTransaction();
try {
session.delete(dept);
tr.commit();
} catch (Exception e) {
e.printStackTrace();
tr.rollback();
} finally {
session.close();
}
}
}
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.pojos.Dept;
import com.pojos.Emp;
public class 级联添加 {
/**
* @param args
* 同时添加新部门和新员工
*/
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
// 1.实例化新部门
Dept dept = new Dept();
dept.setDepname("国防部");
// 2.实例化新员工
Emp e1 = new Emp();
Emp e2 = new Emp();
e1.setEmpname("张三");
e2.setEmpname("李四");
// 3.把员工添加到新部门
dept.getEmps().add(e1);
dept.getEmps().add(e2);
// 4.保存新部门
Transaction tr = session.beginTransaction();
try {
session.save(dept);
tr.commit();
} catch (Exception e) {
e.printStackTrace();
tr.rollback();
} finally {
session.close();
}
}
}
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="com.total">
<class name="Dep">
<id name="depId">
<generator class="native"></generator>
</id>
<property name="depName"></property>
<!-- 关系 -->
<!--name表示部门表中有很多员工,class表示emps表示的类型,key是外键,它必须跟主表中的外键的名字一样,正是根据外键才能找到员工的 -->
<set name="emps" cascade="save-update">
<key column="depId"></key>
<one-to-many class="com.total.Emp"/>
</set>
</class>
</hibernate-mapping>
//emp.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">
<hibernate-mapping
package="com.total">
<class name="Emp" >
<id name="empId">
<generator class="native"></generator>
</id>
<property name="empName"></property>
<many-to-one not-null="true" cascade="all" name="dep" column="depId" ></many-to-one><!--depId是外键的字段名,dep是外键的对象表示形式,cascede表示的级联,not-null表示外键不能为空 -->
</class>
</hibernate-mapping>
//Dep的代码
import java.util.HashSet;
import java.util.Set;
public class Dep {
private String depName;
private Integer depId;
private Set<Emp> emps = new HashSet<Emp>();
public String getDepName() {
return depName;
}
public void setDepName(String depName) {
this.depName = depName;
}
public Integer getDepId() {
return depId;
}
public void setDepId(Integer depId) {
this.depId = depId;
}
public Set<Emp> getEmps() {
return emps;
}
public void setEmps(Set<Emp> emps) {
this.emps = emps;
}
}
///Emp的代码
public class Emp {
private String empName;
private Integer empId;
private Dep dep;
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public Integer getEmpId() {
return empId;
}
public void setEmpId(Integer empId) {
this.empId = empId;
}
public Dep getDep() {
return dep;
}
public void setDep(Dep dep) {
this.dep = dep;
}
}
//这是hibernate.cfg.xml的代码
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="foo">
<property name="show_sql">true</property>
<property name="myeclipse.connection.profile">mysql</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/hibernate
</property>
<property name="connection.username">root</property>
<property name="connection.password">caohuan</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="com/total/Dep.hbm.xml" />
<mapping resource="com/total/Emp.hbm.xml" />
</session-factory>
</hibernate-configuration>
//这是hibernateUtil的代码
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static SessionFactory factory;
private HibernateUtil(){};
static{
Configuration configuration = new Configuration().configure();
factory = configuration.buildSessionFactory();
}
public static SessionFactory getSessionFactory()
{
return factory;
}
public static Session getSession()
{
return factory.openSession();
}
}
//这是测试的代码
import java.util.Set;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class Main {
public static void main(String[] args) {
Session session = HibernateUtil.getSession();
Transaction transaction = session.beginTransaction();
/*Dep dep = new Dep();
dep.setDepName("a");
Emp emp = new Emp();
emp.setEmpName("张三");
emp.setDep(dep);
session.save(dep);
session.save(emp);
transaction.commit();
session.close();*/
/*Dep dep = new Dep();
dep.setDepName("liaonanbu");
Emp emp1 = new Emp();
emp1.setDep(dep);
emp1.setEmpName("李四");
Emp emp2 = new Emp();
emp2.setEmpName("李四");
emp2.setDep(dep);
session.save(dep);
session.save(emp1);
session.save(emp2);
emp1.setEmpName("caohuan");//这是持久化对象,hibernate会自动进行处理(即进行更新操作)
transaction.commit();
session.close();*/
//Emp emp = (Emp) session.get(Emp.class, 1);
//System.out.println(emp.getDep().getDepName());
/*Dep dep = (Dep) session.get(Dep.class, 1);
Set<Emp> emps = dep.getEmps();
for (Emp emp : emps) {
System.out.println(emp.getEmpName());
}*/
Dep dep = new Dep();
dep.setDepName("b");
Emp emp = new Emp();
emp.setEmpName("张三123");
emp.setDep(dep);
//dep.getEmps().add(emp);//部门里面增加一个员工
// Hibernate.initialize(emp.getDep());
session.save(emp);
transaction.commit();
session.close();
}
}
//这是第二个例子
//Dept.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 类和表的关系 -->
<class name="com.pojos.Dept" table="dept">
<!-- 主键 -->
<id name="depid" column="depid">
<generator class="native"></generator>
</id>
<!-- 其它字段 -->
<property name="depname" column="depname"></property>
<!-- 关系 key是外键名字
cascade=delete级联删除,删除主表时,子表也删除
cascade=save-update 级联添加
cascade=all (级联删除和添加)
cascade=none(默认,不级联)
-->
<set name="emps" cascade="delete,save-update">
<key column="depid"></key>
<one-to-many class="com.pojos.Emp"/>
</set>
</class>
</hibernate-mapping>
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
public class Dept implements Serializable {
private int depid;// 部门id
private String depname; // 部门名称
private Set emps = new HashSet();// 多个员工
public int getDepid() {
return depid;
}
public void setDepid(int depid) {
this.depid = depid;
}
public String getDepname() {
return depname;
}
public void setDepname(String depname) {
this.depname = depname;
}
public Set getEmps() {
return emps;
}
public void setEmps(Set emps) {
this.emps = emps;
}
}
//Emp.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 类和表的映射 -->
<class name="com.pojos.Emp" table="emp">
<!-- 主键策略 -->
<id name="empid" column="empid">
<generator class="native"></generator>
</id>
<!-- 其它字段 -->
<property name="empname" column="empname"></property>
<!-- 关系(多个员工对应一个部门) -->
<many-to-one name="dep" column="depid">
</many-to-one>
</class>
</hibernate-mapping>
import java.io.Serializable;
public class Emp implements Serializable {
// 员工编号
private int empid;
// 员工姓名
private String empname;
// 所在部门
private Dept dep;
public int getEmpid() {
return empid;
}
public void setEmpid(int empid) {
this.empid = empid;
}
public String getEmpname() {
return empname;
}
public void setEmpname(String empname) {
this.empname = empname;
}
public Dept getDep() {
return dep;
}
public void setDep(Dept dep) {
this.dep = dep;
}
}
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.sun.faces.el.FacesCompositeELResolver;
/*
* 工具类,获取session
*/
public class HibernateSessionFactory {
//读取总的配置文件
static Configuration cfg = new Configuration().configure();
//创建session工厂
static SessionFactory factory = cfg.buildSessionFactory();
//创建session
public static Session getSession(){
return factory.openSession();
}
}
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class 创建表 {
/**
* @param args
*/
public static void main(String[] args) {
Configuration cfg = new Configuration().configure();
SchemaExport export = new SchemaExport(cfg);
//是否显示sql,是否执行sql
export.create(true, true);
}
}
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.pojos.Dept;
public class 添加一个新部门 {
/**
* @param args
*/
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
Dept dept = new Dept();
dept.setDepname("了男部");
// 开启事务
Transaction tr = session.beginTransaction();
try {
session.save(dept);
tr.commit();
} catch (Exception e) {
e.printStackTrace();
tr.rollback();
} finally {
session.close();
}
}
}
import java.util.Set;
import org.hibernate.Session;
import com.pojos.Dept;
import com.pojos.Emp;
public class 输出1号部门所有员工 {
/**
* @param args
*/
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
//查找1号部门
Dept dept = (Dept) session.get(Dept.class, 1);
//得到这个部门所有员工
Set<Emp> set = dept.getEmps();
for (Emp emp : set) {
System.out.println(emp.getEmpname());
}
}
}
import java.util.List;
import java.util.Set;
import org.hibernate.Query;
import org.hibernate.Session;
import com.pojos.Dept;
import com.pojos.Emp;
public class 输出1号部门所有员工二 {
/**
* @param args
*/
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
String hql = "from Emp e where e.dep=?";
Query query = session.createQuery(hql);
query.setParameter(0, 1);
List<Emp> list = query.list();
for (Emp emp : list) {
System.out.println(emp.getEmpname());
}
}
}
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.pojos.Dept;
import com.pojos.Emp;
public class 添加新员工方法二 {
/**
* @param args
*/
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
// 查找一号部门
Dept dept = (Dept) session.load(Dept.class, 1);
// 添加新员工
Emp emp = new Emp();
emp.setEmpname("李四");
dept.getEmps().add(emp);
Transaction tr = session.beginTransaction();
try {
session.save(emp);
tr.commit();
} catch (Exception e) {
tr.rollback();
e.printStackTrace();
} finally {
session.close();
}
}
}
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.pojos.Dept;
import com.pojos.Emp;
public class 添加新员工方法一 {
/**
* @param args
*/
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
// 查找一号部门
Dept dept = (Dept) session.load(Dept.class, 1);
// 添加新员工
Emp emp = new Emp();
emp.setEmpname("张三");
emp.setDep(dept); //效率高
Transaction tr = session.beginTransaction();
try {
session.save(emp);
tr.commit();
} catch (Exception e) {
tr.rollback();
e.printStackTrace();
} finally {
session.close();
}
}
}
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.pojos.Dept;
public class 级联删除 {
/**
* @param args
* 级联:主表操作时,子表也操作 可以有:级联删除和级联添加 级联删除:删除主表,从表自动删除 级联添加:同时添加主表和从表
* 在默认的情况,不支持级联,要修改映射文件
* 注意:HQL不支持级联
*/
public static void main(String[] args) {
// 查找1号部门
Session session = HibernateSessionFactory.getSession();
Dept dept = (Dept) session.load(Dept.class, 1);
Transaction tr = session.beginTransaction();
try {
session.delete(dept);
tr.commit();
} catch (Exception e) {
e.printStackTrace();
tr.rollback();
} finally {
session.close();
}
}
}
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.pojos.Dept;
import com.pojos.Emp;
public class 级联添加 {
/**
* @param args
* 同时添加新部门和新员工
*/
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
// 1.实例化新部门
Dept dept = new Dept();
dept.setDepname("国防部");
// 2.实例化新员工
Emp e1 = new Emp();
Emp e2 = new Emp();
e1.setEmpname("张三");
e2.setEmpname("李四");
// 3.把员工添加到新部门
dept.getEmps().add(e1);
dept.getEmps().add(e2);
// 4.保存新部门
Transaction tr = session.beginTransaction();
try {
session.save(dept);
tr.commit();
} catch (Exception e) {
e.printStackTrace();
tr.rollback();
} finally {
session.close();
}
}
}
相关文章推荐
- Hibernate关系映射之继承映射
- 孙卫琴Hibernate第四章对象-关系映射基础
- hibernate 一对一主键映射关系
- Hibernate 映射关系 ---Many2Many 双向关联
- Hibernate知识整理4---关系映射及持久化对象
- Hibernate(四)一对多映射 补充二:单向多对一关系(学生->班级)
- Hibernate 关系映射
- Hibernate之对象关系映射06一对一双向外键关联
- hibernate基于外键的双向1-1关系映射
- 在java-Hibernate关系映射之关联映射知识描述
- hibernate的3种继承映射关系总结——TPH,TPS,TPC
- hibernate关系映射之单向多对一和双向一对多
- hibernate3 关系映射 使用说明
- hibernate关系映射管理(一对多,多对一,一对一,多对多)
- MySQL\Hibernate\Java数据类型映射关系
- Java类型、Hibernate映射类型和SQL类型之间的对应关系
- Hibernate执行流程和关系映射
- hibernate之映射关系多对多
- hibernate注解关系映射
- hibernate 映射组成关系