数据库 代码
dep 部门表 love 爱好表 emp 员工表 emplove员工爱好表
  1. create table dep(   
  2.   depid int identity primary key,   
  3.   depname varchar(50)    
  4. )   
  5.   
  6. insert into dep values('技术部')   
  7. insert into dep values('市场部')   
  8. insert into dep values('人事部')   
  9. insert into dep values('财务部')   
  10.   
  11. create table emp(   
  12.   eid int identity primary key,   
  13.   ename varchar(50),   
  14.   sex varchar(10),   
  15.   address varchar(100),   
  16.   depid int not null,   
  17.   borthday datetime   
  18. )   
  19.   
  20. create table love(   
  21.   lid int identity primary key,   
  22.   lname varchar(50)   
  23. )   
  24.   
  25. insert into love values('看书')   
  26. insert into love values('游戏')   
  27. insert into love values('标准舞')   
  28. insert into love values('游泳')   
  29.   
  30. create table emplove(   
  31.   elid int identity primary key,   
  32.   eid int not null,   
  33.   lid int not null  
  34. )   
  35.   
  36. alter table emp add constraint fk_depid foreign key (depid)    
  37. references dep(depid)   
  38.   
  39. alter table emplove add constraint fk_eid foreign key (eid)    
  40. references emp(eid)   
  41.   
  42. alter table emplove add constraint fk_lid foreign key (lid)    
  43. references love(lid)   
  44.   
  45. select * from love   
  46. select * from dep   
  47. select * from emp   
  48. select * from emplove  

 po包中自动生成的emp表对应的POJO类

  1. package com.david.po;   
  2.   
  3. import java.util.Date;   
  4. import java.util.HashSet;   
  5. import java.util.Set;   
  6.   
  7. /**  
  8.  * Emp generated by MyEclipse Persistence Tools  
  9.  */  
  10.   
  11. public class Emp implements java.io.Serializable {   
  12.   
  13.     // Fields   
  14.   
  15.     private Integer eid;   
  16.   
  17.     private Dep dep;   
  18.   
  19.     private String ename;   
  20.   
  21.     private String sex;   
  22.   
  23.     private String address;   
  24.   
  25.     private Date borthday;   
  26.   
  27.     private Set emploves = new HashSet(0);   
  28.   
  29.     // Constructors   
  30.   
  31.     /** default constructor */  
  32.     public Emp() {   
  33.     }   
  34.   
  35.     /** minimal constructor */  
  36.     public Emp(Dep dep) {   
  37.         this.dep = dep;   
  38.     }   
  39.   
  40.     /** full constructor */  
  41.     public Emp(Dep dep, String ename, String sex, String address,   
  42.             Date borthday, Set emploves) {   
  43.         this.dep = dep;   
  44.         this.ename = ename;   
  45.         this.sex = sex;   
  46.         this.address = address;   
  47.         this.borthday = borthday;   
  48.         this.emploves = emploves;   
  49.     }   
  50.   
  51.     // Property accessors   
  52.   
  53.     public Integer getEid() {   
  54.         return this.eid;   
  55.     }   
  56.   
  57.     public void setEid(Integer eid) {   
  58.         this.eid = eid;   
  59.     }   
  60.   
  61.     public Dep getDep() {   
  62.         return this.dep;   
  63.     }   
  64.   
  65.     public void setDep(Dep dep) {   
  66.         this.dep = dep;   
  67.     }   
  68.   
  69.     public String getEname() {   
  70.         return this.ename;   
  71.     }   
  72.   
  73.     public void setEname(String ename) {   
  74.         this.ename = ename;   
  75.     }   
  76.   
  77.     public String getSex() {   
  78.         return this.sex;   
  79.     }   
  80.   
  81.     public void setSex(String sex) {   
  82.         this.sex = sex;   
  83.     }   
  84.   
  85.     public String getAddress() {   
  86.         return this.address;   
  87.     }   
  88.   
  89.     public void setAddress(String address) {   
  90.         this.address = address;   
  91.     }   
  92.   
  93.     public Date getBorthday() {   
  94.         return this.borthday;   
  95.     }   
  96.   
  97.     public void setBorthday(Date borthday) {   
  98.         this.borthday = borthday;   
  99.     }   
  100.   
  101.     public Set getEmploves() {   
  102.         return this.emploves;   
  103.     }   
  104.   
  105.     public void setEmploves(Set emploves) {   
  106.         this.emploves = emploves;   
  107.     }   
  108.   
  109. }  

 

po包中自动生成的emp表对应的hibernate映射文件(做了级联)
  1. xml version="1.0" encoding="utf-8"?>  
  2. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  3.   
  4. <hibernate-mapping>  
  5.     <class name="com.david.po.Emp" table="emp" schema="dbo" catalog="mytest">  
  6.         <id name="eid" type="java.lang.Integer">  
  7.             <column name="eid" />  
  8.             <generator class="native" />  
  9.         id>  
  10.         <many-to-one name="dep" class="com.david.po.Dep" fetch="select">  
  11.             <column name="depid" not-null="true" />  
  12.         many-to-one>  
  13.         <property name="ename" type="java.lang.String">  
  14.             <column name="ename" length="50" />  
  15.         property>  
  16.         <property name="sex" type="java.lang.String">  
  17.             <column name="sex" length="10" />  
  18.         property>  
  19.         <property name="address" type="java.lang.String">  
  20.             <column name="address" length="100" />  
  21.         property>  
  22.         <property name="borthday" type="java.util.Date">  
  23.             <column name="borthday" length="23" />  
  24.         property>  
  25.         <set name="emploves" inverse="true" cascade="all">  
  26.             <key>  
  27.                 <column name="eid" not-null="true" />  
  28.             key>  
  29.             <one-to-many class="com.david.po.Emplove" />  
  30.         set>  
  31.     class>  
  32. hibernate-mapping>  
test包下添加员工TestAddEmp类.(因为有了级联,所以在添加员工表的时候同时向员工爱好表添加了数据,并牵扯到部门表和爱好表)
  1. package com.david.test;   
  2. import java.text.ParseException;   
  3.   
  4. import com.david.po.*;   
  5. import com.david.myhibernate.*;   
  6.   
  7. public class TestAddEmp {   
  8.   
  9.     /**  
  10.      * @param args  
  11.      */  
  12.     public static void main(String[] args) {   
  13.         // TODO Auto-generated method stub   
  14.         EmpDAO empdao= new EmpDAO();   
  15.         DepDAO depdao=new DepDAO();   
  16.         LoveDAO lovedao= new LoveDAO();   
  17.         EmploveDAO eldao = new EmploveDAO();   
  18.         Emp emp=new Emp();   
  19.            
  20.         emp.setEname("最终版本");   
  21.         emp.setAddress("小寨");   
  22.         try {   
  23.             emp.setBorthday(java.text.DateFormat.getDateInstance().parse("1985-2-2"));   
  24.         } catch (ParseException e) {   
  25.             // TODO Auto-generated catch block   
  26.             e.printStackTrace();   
  27.         }   
  28.         emp.setSex("男");   
  29.         emp.setDep(depdao.findById(1));   
  30.            
  31.         String [] loveid={"1","2","3","4"};   
  32.         for (int i = 0; i < loveid.length; i++) {   
  33.             Emplove emplove= new Emplove();   
  34.             Love love=lovedao.findById(Integer.parseInt(loveid[i]));   
  35.             emplove.setEmp(emp);   
  36.             emplove.setLove(love);   
  37.             emp.getEmploves().add(emplove);   
  38.         }   
  39.         empdao.save(emp);   
  40.            
  41.            
  42.     }   
  43.   
  44. }   

test包下修改员工表UpdateEmp类,和增加员工唯一不同的地方是需要按照id来查找员工,并且把员工之前添加的员工爱好表中的数据取出来并删除它.然后重新添加数据.

  1. package com.david.test;   
  2. import java.text.ParseException;   
  3.   
  4. import com.david.po.*;   
  5. import com.david.myhibernate.*;   
  6. import java.util.*;   
  7.   
  8. public class UpdateEmp {   
  9.   
  10.     /**  
  11.      * @param args  
  12.      */  
  13.     public static void main(String[] args) {   
  14.         // TODO Auto-generated method stub   
  15.         EmpDAO empdao= new EmpDAO();   
  16.         LoveDAO lovedao= new LoveDAO();   
  17.         DepDAO depdao= new DepDAO();   
  18.         EmploveDAO eldao= new EmploveDAO();   
  19.         Emp emp= empdao.findById(12);   
  20.         emp.setEname("傻瓜");   
  21.         emp.setSex("男");   
  22.         emp.setAddress("焦作");   
  23.         try {   
  24.             emp.setBorthday(java.text.DateFormat.getDateInstance().parse("2007-9-4"));   
  25.         } catch (ParseException e) {   
  26.             // TODO Auto-generated catch block   
  27.             e.printStackTrace();   
  28.         }   
  29.         emp.setDep(depdao.findById(2));   
  30.            
  31.         Set emplove=emp.getEmploves();   
  32.         Object [] ob=emplove.toArray();   
  33.         //String [] loveid2={"42","43","44","45"};   
  34.         for (int j = 0; j < ob.length; j++) {   
  35.             Emplove el=(Emplove) ob[j];   
  36.            
  37.             eldao.delete(el);   
  38.                
  39.         }   
  40.            
  41.            
  42.         String [] loveid={"3","4"};   
  43.         for (int i = 0; i < loveid.length; i++) {   
  44.             Emplove emplove2= new Emplove();   
  45.             emplove2.setEmp(emp);   
  46.             Love love=lovedao.findById(Integer.parseInt(loveid[i]));   
  47.             emplove2.setLove(love);   
  48.             emp.getEmploves().add(emplove2);   
  49.         }   
  50.            
  51.         empdao.attachDirty(emp);   
  52.            
  53.            
  54.   
  55.     }   
  56.   
  57. }   
  • hibernate.rar (3.1 MB)
  • 描述: 源码奉上,为了节省空间,jar删完了.请自己加一下.
  • 下载次数: 160
评论
56553655 2007-09-17
我正在找这个东西,太感谢了,使用的时候就遇到主外键约束出问题。
我的*.hbm.xml是采用middle-gen2.1自动生成的,因为本身我对Hibernate也不是很熟,所以出了问题也不知道是怎么。
问了一下网上的朋友,我这主个键关朕,刚开始还真不好解决,先谢
56553655 2007-09-17
MySQL数据库版:
create table dep(depid int auto_increment primary key,depname varchar(50));
insert into dep(depname) values('技术部');
insert into dep(depname) values('市场部');
insert into dep(depname) values('人事部');
insert into dep(depname) values('财务部');

create table emp(
eid int auto_increment primary key,
ename varchar(50),
sex varchar(10),
address varchar(100),
depid int not null,
borthday datetime
);

create table love(
lid int auto_increment primary key,
lname varchar(50)
);

insert into love(lname) values('看书');
insert into love(lname) values('游戏');
insert into love(lname) values('标准舞');
insert into love(lname) values('游泳');

create table emplove(
elid int auto_increment primary key,
eid int not null,
lid int not null
);

alter table emp add foreign key (depid) references dep(depid);
alter table emplove add foreign key (eid) references emp(eid);
alter table emplove add foreign key (lid) references love(lid);
想你是西安的吧
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

dmewy
搜索本博客
存档
最新评论