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

    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,否则违反约束条件

  • 相关阅读:
    POJ 1681 Painter's Problem(高斯消元法)
    HDU 3530 Subsequence(单调队列)
    HDU 4302 Holedox Eating(优先队列或者线段树)
    POJ 2947 Widget Factory(高斯消元法,解模线性方程组)
    HDU 3635 Dragon Balls(并查集)
    HDU 4301 Divide Chocolate(找规律,DP)
    POJ 1753 Flip Game(高斯消元)
    POJ 3185 The Water Bowls(高斯消元)
    克琳:http://liyu.eu5.org
    WinDbg使用
  • 原文地址:https://www.cnblogs.com/jingpeipei/p/5833980.html
Copyright © 2011-2022 走看看