您的位置:首页 > 其它

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();

}
}

}

打印的sql语句

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();
}
}
}
打印的sql语句

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();
}
}

}

打印的sql语句

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;

}

打印的sql语句

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: