zoukankan      html  css  js  c++  java
  • Hibernate映射多对多双向关联关系(小案例)


    多对多双向关联关系(Project(工程)/Emp(员工)为案例):

    步骤如下:

    1、创建Project类,并需要定义集合类型的Emp属性

    复制代码
    public class Project {
        //编号
         private Integer pid;
         //名称
         private String pname;
         //定义集合类型的Emp属性
         private Set<Emp> emps=new HashSet<Emp>();
         public Integer getPid() {
            return pid;
        }
        public void setPid(Integer pid) {
            this.pid = pid;
        }
        public String getPname() {
            return pname;
        }
        public void setPname(String pname) {
            this.pname = pname;
        }
        public Set<Emp> getEmps() {
            return emps;
        }
        public void setEmps(Set<Emp> emps) {
            this.emps = emps;
        }
    复制代码

    2、创建Emp类,并需要定义集合类型的Project属性

    复制代码
    public class Emp {
        private  String empname;
        private  Integer nid;
        private Set<Project> pros=new HashSet<Project>();
        public String getEmpname() {
            return empname;
        }
        public void setEmpname(String empname) {
            this.empname = empname;
        }
        public Integer getNid() {
            return nid;
        }
        public void setNid(Integer nid) {
            this.nid = nid;
        }
        public Set<Project> getPros() {
            return pros;
        }
        public void setPros(Set<Project> pros) {
            this.pros = pros;
        }
        
    
    }
    复制代码

    3、需建立第三张表 关联Project和Emp各自的主键pid、nid

    多对多关联关系的实现需要一个连接表,<set>的属性指出的就是连接表的名称,<key>指出连接表参照Project表id的外键的字段名;<many-to-many>中的class指定与Emp多对多关联的类,column指定连接表参照Emp映射表(此处由Emp.hbm.xml映射为Emp表)id的外键的字段名。

    4、编写Project.hbm.xml和Emp.hbm.xml小配置,并植入<set>元素中的table属性 第三张表ProEmp 以及多对多<many-to-many>标签 class指定类型 

    Emp.hbm.xml关键代码如下:

    Project.hbm.xml关键代码如下:

    5、大配置hibernate.cfg.xml 需关联小配置

    <mapping resource="cn/happy/manytomany/Project.hbm.xml" />
    <mapping resource="cn/happy/manytomany/Emp.hbm.xml" />

    6、测试类 Test

    复制代码
    /*
         * 多对多 双向
         */
        
        @Test
        public void addTest(){
                    //创建员工对象
                 Emp emp=new Emp();
                 emp.setEmpname("未知");
                 //创建工程对象
                 Project pro=new Project();
                 pro.setPname("花园");
                 
                 //将员工对象添加到工程  反之 同理
                 pro.getEmps().add(emp);
                 emp.getPros().add(pro);
                 
                 //保存
                 session.save(pro);
                 session.save(emp);
                 
                 
              
        }
    复制代码

    注:对于双向多对多关联,需要将其中一端inverse属性设为True,否则违反约束条件。


  • 相关阅读:
    Python接收邮件并保存至MySQL
    openerp 7.0邮件接收中文附件乱码问题解决办法
    openerp 7.0邮件多用户发送失败问题 解决方法
    OpenERP7测试手记之
    Windows Live Writer配置步骤
    发布Live Writer代码着色插件CNBlogs.CodeHighlighter
    拒绝平庸,与众不同
    openerp学习笔记 视图继承(tree、form、search)
    软件开发中团队首领的好坏之分
    解耦——Hybrid H5跨平台性思考
  • 原文地址:https://www.cnblogs.com/hq-123/p/5837339.html
Copyright © 2011-2022 走看看