关联映射-----一对多小实例
Employee.java
package com.hbsi.domain;
//员工类
public class Employee {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Employee.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="com.hbsi.domain">
<class name="Employee" table="employee">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
Department.java
package com.hbsi.domain;
import java.util.Set;
//部门
public class Department {
private int id;
private String name;
//增加的集合属性,一对多
private Set<Employee> emps;
public Set<Employee> getEmps() {
return emps;
}
public void setEmps(Set<Employee> emps) {
this.emps = emps;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Department.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="com.hbsi.domain">
<class name="Department" table="department">
<id name="id" column="id">
<!-- native自动增长 根据不同的底层数据库选择产生不同的策略 -->
<generator class="native"/>
</id>
<property name="name" column="name"/>
<!-- 类里面的集合属性的体现,这个集合属性反应的是一对多 -->
<!-- key 查询员工表时参照的列 -->
<set name="emps" >
<key column="depart_id"></key>
<one-to-many class="Employee"/>
</set>
</class>
</hibernate-mapping>
OneToMany.java
package com.hbsi.test;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.hbsi.domain.Department;
import com.hbsi.domain.Employee;
import com.hbsi.hibernate.utils.HibernateUtil;
public class OneToMany {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
add();
query(1);
}
//能否正确插入,查询
//添加相应的信息
static Department add(){
Session s=null;
Transaction tx=null;
try{
s=HibernateUtil.getSession();
tx=s.beginTransaction();
//增加部门,员工
Department dep=new Department();
dep.setName("部门一");
Employee e1=new Employee();
e1.setName("Tom");
Employee e2=new Employee();
e2.setName("dddd");
Employee e3=new Employee();
e3.setName("aaa");
Set<Employee> set=new HashSet<Employee>();
set.add(e1);
set.add(e2);
set.add(e3);
dep.setEmps(set);//做对象之间的关联,告诉部门有哪些员工
s.save(e1);
s.save(e2);
s.save(e3);
tx.commit();
return dep;
}finally{
if(s!=null){
s.close();
}
}
}
//通过部门id查找与它相关联的员工
static Department query(int deptId){
Session s=null;
try{
//查询
s=HibernateUtil.getSession();
Department d=(Department) s.get(Department.class, deptId);
System.out.println(d.getName()+"有"+d.getEmps().size()+"个员工,分别为:");//集合里面有多少个元素
//遍历出所有符合的员工
Set<Employee> list=d.getEmps();
for(Employee entities:list){
System.out.println(entities.getName());
}
return d;
}finally{
if(s!=null){
s.close();
}
}
}
}
一对一多关联映射实现
本文介绍了使用Java和Hibernate框架实现一对一多关联映射的方法,包括实体类设计、配置文件编写以及具体操作流程。

被折叠的 条评论
为什么被折叠?



