//部門
public class Department {
private Long id;
private String name;
private String description;
private Set<Employee> employees; //一端執有多端的一個集合引用
getter();
setter();
}
//員工
public class Employee {
private Long id;
private String username;
private Date joinTime;
private Department dept; //持有關聯實體類的一個引用
getter();
setter();
}
//部門表的映射檔案
<hibernate-mapping>
<class name="com.liuc.domain.Department" table="dept">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="description"/>
<set name="employees" inverse="true" cascade="all-delete-orphan" >
<key column="dept_id"/>
<one-to-many class="com.liuc.domain.Employee" />
</set>
</class>
</hibernate-mapping>
員工表的映射檔案
<hibernate-mapping>
<class name="com.liuc.domain.Employee" table="emp">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="username"/>
<property name="joinTime" column="join_time"/>
<!-- 映射員工到部門的多對一 -->
<many-to-one name="dept" column="dept_id" not-null="true" foreign-key="fk_emp_dept"/>
</class>
</hibernate-mapping>
生成的表結構
create table dept (
id bigint not null auto_increment,
name varchar(255),
description varchar(255),
primary key (id)
);
create table emp (
id bigint not null auto_increment,
username varchar(255),
join_time datetime,
dept_id bigint not null,
primary key (id)
);
測試jUnit3
如果是jUnit4 可以@Test
public class MappingTest {
private static SessionFactory sessionFactory;
@BeforeClass
public static void init(){
sessionFactory = HibernateUtil.getSessionFactory();
}
@AfterClass
public static void destroy(){
sessionFactory = null;
}
@Test
public void testSave(){
Session session = sessionFactory.openSession();
session.beginTransaction();
Department dept = new Department();
dept.setName("研發部");
dept.setDescription("研發公司的産品");
session.save(dept);
Employee emp = new Employee();
emp.setUsername("張三");
emp.setJoinTime(new Date());
emp.setDept(dept); //設定它們關聯關系
session.save(emp);
session.getTransaction().commit();
session.close();
}
SQL語句
Hibernate:
insert
into
dept
(name, description)
values
(?, ?)
Hibernate:
insert
into
emp
(username, join_time, dept_id)
values
(?, ?, ?)
級聯删除,删除一個部門級職删除一個部門下的所有員工
@Test
public void testDelete(){
Session session = sessionFactory.openSession();
session.beginTransaction();
Department dep =(Department)session.get(Department.class, Long.valueOf(2));
session.delete(dep);
session.getTransaction().commit();
session.close();
}
SQL語句
Hibernate:
select
department0_.id as id0_0_,
department0_.name as name0_0_,
department0_.description as descript3_0_0_
from
dept department0_
where
department0_.id=?
Hibernate:
select
employees0_.dept_id as dept4_1_,
employees0_.id as id1_,
employees0_.id as id1_0_,
employees0_.username as username1_0_,
employees0_.join_time as join3_1_0_,
employees0_.dept_id as dept4_1_0_
from
emp employees0_
where
employees0_.dept_id=?
Hibernate:
delete
from
emp
where
id=?
Hibernate:
delete
from
dept
where
id=?