package org.niit.ormlab.example1; import java.io.Serializable; import java.util.Set; public class Depart implements Serializable { private Integer did; private String dname; private String ddesc; public Depart() { } public Depart(String dname, String ddesc) { super(); this.dname = dname; this.ddesc = ddesc; } public Depart(Integer did, String dname, String ddesc) { super(); this.did = did; this.dname = dname; this.ddesc = ddesc; } public Integer getDid() { return did; } public void setDid(Integer did) { this.did = did; } public String getDname() { return dname; } public void setDname(String dname) { this.dname = dname; } public String getDdesc() { return ddesc; } public void setDdesc(String ddesc) { this.ddesc = ddesc; } } package org.niit.ormlab.example1; import java.io.Serializable; public class Emp implements Serializable { private int eid; private String ename; private String esex; private String eaddr; private String etel; private Depart depart;//many to one public Emp() { // TODO Auto-generated constructor stub } public Emp(String ename, String esex, String eaddr, String etel, Depart depart) { super(); this.ename = ename; this.esex = esex; this.eaddr = eaddr; this.etel = etel; this.depart = depart; } public Emp(int eid, String ename, String esex, String eaddr, String etel, Depart depart) { super(); this.eid = eid; this.ename = ename; this.esex = esex; this.eaddr = eaddr; this.etel = etel; this.depart = depart; } public int getEid() { return eid; } public void setEid(int eid) { this.eid = eid; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public String getEsex() { return esex; } public void setEsex(String esex) { this.esex = esex; } public String getEaddr() { return eaddr; } public void setEaddr(String eaddr) { this.eaddr = eaddr; } public String getEtel() { return etel; } public void setEtel(String etel) { this.etel = etel; } public Depart getDepart() { return depart; } public void setDepart(Depart depart) { this.depart = depart; } } Depart.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 package="org.niit.ormlab.example1"> <!-- 多对一的【一方】 --> <class name="Depart" table="`Depart`"> <id name="did" column="did" type="integer"> <generator class="identity" /> </id> <property name="dname" column="dname" type="string" /> <property name="ddesc" column="ddesc" type="string" /> </class> </hibernate-mapping> 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 package="org.niit.ormlab.example1"> <!-- 多对一的【多方】 --> <class name="Emp" table="`Emp`"> <id name="eid" column="eid" type="integer"> <generator class="identity" /> </id> <property name="ename" column="ename" type="string" /> <property name="esex" column="esex" type="string" /> <property name="etel" column="`etel`" type="string"/> <property name="eaddr" column="eaddr" type="string" /> <!-- many-to-one建立depart属性和外键did之间的映射 name=待映射的持久化类的属性名【Emp类的depart属性】 class=持久化类名 cascade=级联行为 not-null=是否允许为空,影响Hibernate的保存时行为 --> <many-to-one name="depart" class="Depart" column="did" cascade="save-update" not-null="true"/> </class> </hibernate-mapping> hibernate.cfg.xml: <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="hibernate.connection.url"> jdbc:mysql://localhost:3306/crm </property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="show_sql">true</property> <property name="format_sql">false</property> <mapping resource="org/niit/ormlab/example1/Depart.hbm.xml" /> <mapping resource="org/niit/ormlab/example1/Emp.hbm.xml" /> </session-factory> </hibernate-configuration> 测试类: package org.niit.ormlab.example1; import java.util.List; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Restrictions; public class Client { /**根据部门对象查询员工*/ @SuppressWarnings("unchecked") public List<Emp> getEmpByDepart(Depart depart){ Session session = SessionFactory.getSession(); try { return (List<Emp>)session .createCriteria(Emp.class) .add(Restrictions.eq("depart", depart)) .list(); } catch (Exception e) { e.printStackTrace(); } finally { session.close(); } return null; } /**分别保存员工和部门对象*/ public void saveEmpAndDepart(){ Session session = SessionFactory.getSession(); Transaction ts = session.beginTransaction(); try { Depart depart = new Depart("后勤部","后勤部"); session.persist(depart); Emp emp = new Emp("老韩","男","本地","116",depart); session.persist(emp); ts.commit(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); ts.rollback(); } finally { session.close(); } } /**级联保存员工和部门对象[级联]*/ public void saveEmpAndDepartWithCascade(){ Session session = SessionFactory.getSession(); Transaction ts = session.beginTransaction(); try { Depart depart = new Depart("媒体部","媒体部"); Emp emp = new Emp("张无忌","男","武当","119",depart); session.save(emp);//保存员工的同时级联保存部门 ts.commit(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); ts.rollback(); } finally { session.close(); } } /** * 查询一个部门对象 * */ public Depart getDepart(int did){ Session session = SessionFactory.getSession(); try { return (Depart)session.get(Depart.class,did); } catch (Exception e) { e.printStackTrace(); } finally { session.close(); } return null; } private void showEmpList(List<Emp> empList){ if (empList!=null && empList.size()>0){ for (Emp emp : empList) { System.out.println(emp.getEid()+"/t"+emp.getEname()+"/t"+emp.getEsex()); } } } public static void main(String[] args) { Client client = new Client(); //测试保存1 //client.saveEmpAndDepartWithCascade(); //测试分别保存saveEmpAndDepart //client.saveEmpAndDepart(); //测试查询getEmpByDepart // Depart depart = client.getDepart(9); // List<Emp> empList = client.getEmpByDepart(depart); // client.showEmpList(empList); } }