Hibernate关联关系映射
2014-11-12 16:30
274 查看
1. Hibernate关联关系映射
1.1. one to one
<class name="Person"> <id name="id" column="personId"> <generator class="native"/> </id> <join table="PersonAddress" optional="true"> <key column="personId" unique="true"/> <many-to-one name="address" column="addressId" not-null="true" unique="true"/> </join> </class> <class name="Address"> <id name="id" column="addressId"> <generator class="native"/> </id> </class> |
1.2. one to many
<?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"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.morris.hql.entity.Department" table="DEPARTMENT" schema="SCOTT"> <id name="deptid" type="java.lang.String"> <column name="DEPTID" length="20" /> <generator class="assigned" /> </id> <property name="deptname" type="java.lang.String"> <column name="DEPTNAME" length="20" not-null="true" /> </property> <set name="employees" inverse="true"> <key> <column name="DEPTID" length="20" /> </key> <one-to-many class="com.morris.hql.entity.Employee" /> </set> </class> </hibernate-mapping> |
1.3. many to one
<?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"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.morris.hql.entity.Employee" table="EMPLOYEE" schema="SCOTT"> <id name="empid" type="java.lang.String"> <column name="EMPID" length="20" /> <generator class="assigned" /> </id> <many-to-one name="department" class="com.morris.hql.entity.Department" fetch="select"> <column name="DEPTID" length="20" /> </many-to-one> <property name="empname" type="java.lang.String"> <column name="EMPNAME" length="20" not-null="true" /> </property> </class> </hibernate-mapping> |
1.4. many to many
<class name="Person"> <id name="id" column="personId"> <generator class="native"/> </id> <set name="addresses" table="PersonAddress"> <key column="personId"/> <many-to-many column="addressId" class="Address"/> </set> </class> <class name="Address"> <id name="id" column="addressId"> <generator class="native"/> </id> </class> |
1.5. 实例
1.5.1. 级联增加
public void addDeptEmp(Department dept, Employee emp) { Session session = HibernateSessionFactory.getSession(); Transaction transaction = null; try { transaction = session.beginTransaction(); dept.getEmployees().add(emp); emp.setDepartment(dept); session.save(dept); transaction.commit(); } catch (Exception e) { if (transaction != null) { transaction.rollback(); } e.printStackTrace(); } finally { if (session != null) { session.close(); } } } |
Hibernate: select employee_.EMPID, employee_.DEPTID as DEPTID0_, employee_.EMPNAME as EMPNAME0_ from SCOTT.EMPLOYEE employee_ where employee_.EMPID=? Hibernate: insert into SCOTT.DEPARTMENT (DEPTNAME, DEPTID) values (?, ?) Hibernate: insert into SCOTT.EMPLOYEE (DEPTID, EMPNAME, EMPID) values (?, ?, ?) |
1.5.2. 级联删除
public void deleteDeptEmp(Department dept, Employee emp) { Session session = HibernateSessionFactory.getSession(); Transaction transaction = null; try { transaction = session.beginTransaction(); session.delete(dept); transaction.commit(); } catch (Exception e) { if (transaction != null) { transaction.rollback(); } e.printStackTrace(); } finally { if (session != null) { session.close(); } } } |
Hibernate: select department0_.DEPTID as DEPTID1_1_, department0_.DEPTNAME as DEPTNAME1_1_, employees1_.DEPTID as DEPTID3_, employees1_.EMPID as EMPID3_, employees1_.EMPID as EMPID0_0_, employees1_.DEPTID as DEPTID0_0_, employees1_.EMPNAME as EMPNAME0_0_ from SCOTT.DEPARTMENT department0_ left outer join SCOTT.EMPLOYEE employees1_ on department0_.DEPTID=employees1_.DEPTID where department0_.DEPTID=? Hibernate: delete from SCOTT.EMPLOYEE where EMPID=? Hibernate: delete from SCOTT.DEPARTMENT where DEPTID=? |
1.5.3. 级联修改
public void updateDeptEmp() { Session session = HibernateSessionFactory.getSession(); Transaction transaction = null; try { transaction = session.beginTransaction(); Department dept = (Department) session.load(Department.class, "5"); Employee emp = (Employee) session.load(Employee.class, "1001"); dept.setDeptname("就业部"); emp.setEmpname("a"); session.update(dept); session.update(emp); transaction.commit(); } catch (Exception e) { if (transaction != null) { transaction.rollback(); } e.printStackTrace(); } finally { if (session != null) { session.close(); } } } |
Hibernate: select department0_.DEPTID as DEPTID1_1_, department0_.DEPTNAME as DEPTNAME1_1_, employees1_.DEPTID as DEPTID3_, employees1_.EMPID as EMPID3_, employees1_.EMPID as EMPID0_0_, employees1_.DEPTID as DEPTID0_0_, employees1_.EMPNAME as EMPNAME0_0_ from SCOTT.DEPARTMENT department0_ left outer join SCOTT.EMPLOYEE employees1_ on department0_.DEPTID=employees1_.DEPTID where department0_.DEPTID=? Hibernate: select employee0_.EMPID as EMPID0_0_, employee0_.DEPTID as DEPTID0_0_, employee0_.EMPNAME as EMPNAME0_0_ from SCOTT.EMPLOYEE employee0_ where employee0_.EMPID=? Hibernate: update SCOTT.DEPARTMENT set DEPTNAME=? where DEPTID=? Hibernate: update SCOTT.EMPLOYEE set DEPTID=?, EMPNAME=? where EMPID=? |
1.5.4. 级联查询
public Employee queryEmployeeById(String id){ Session session = HibernateSessionFactory.getSession(); Employee employee = null; try { employee = (Employee) session.load(Employee.class, id); System.out.println(employee.getEmpname()); } finally { if (session != null) { session.close(); } } return employee; } |
Hibernate: select employee0_.EMPID as EMPID0_0_, employee0_.DEPTID as DEPTID0_0_, employee0_.EMPNAME as EMPNAME0_0_ from SCOTT.EMPLOYEE employee0_ where employee0_.EMPID=? Hibernate: select department0_.DEPTID as DEPTID1_0_, department0_.DEPTNAME as DEPTNAME1_0_ from SCOTT.DEPARTMENT department0_ where department0_.DEPTID=? a |
相关文章推荐
- Hibernate学习4—关联关系一对多映射2
- Hibernate读书笔记-----Hibernate的关联映射之组件属性关联关系
- Hibernate,JPA 对象关系映射之关联关系映射策略
- Hibernate关联关系映射
- hibernate关联关系的映射
- Hibernate的关联关系映射
- Hibernate映射多对多双向关联关系(小案例)
- Hibernate_映射_关联关系_cascade属性、单向关联
- Hibernate(六)实现一对多、多对一映射关联关系
- Hibernate 关联关系映射(多对多关联)
- Hibernate学习---关联关系映射
- (转)Hibernate框架基础——多对多关联关系映射
- Hibernate关联关系映射-----基于连接表的单向一对一映射
- Hibernate关联关系映射目录
- Hibernate之基于外键映射的一对一(1-1)关联关系
- 【SSH三大框架】Hibernate基础第六篇:多对一关联关系的映射、分析及加入、查询
- 精通Hibernate——映射一对多关联关系
- hibernate 中关联关系映射中inverse 和cascade的理解
- Hibernate关联关系的映射
- Hibernate_映射_关联关系_一对多多对一映射1