zoukankan      html  css  js  c++  java
  • 【Hibernate】---【注解】多对多

    一、核心配置文件

    <?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">
    <hibernate-configuration>
        <session-factory>
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.password">root</property>
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
            <property name="hibernate.connection.username">root</property>
            
            <property name="hibernate.show_sql">true</property>
            <property name="hibernate.format_sql">true</property>
            <property name="hibernate.hbm2ddl.auto">update</property>
            <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
            <property name="current_session_context_class">thread</property>
            <!-- 
            <mapping resource="com/chinasofti/entity/User.hbm.xml" />
            <mapping resource="com/chinasofti/entity/Role.hbm.xml" />
            -->
            <mapping class="com.chinasofti.entity.User"/>
            <mapping class="com.chinasofti.entity.Role"/>
        </session-factory>
    </hibernate-configuration>

    二、实体类

      User

    package com.chinasofti.entity;
    
    import java.util.HashSet;
    import java.util.Set;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
    
    
    @Entity
    @Table(name="T_USER3")
    public class User {
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        private Integer user_id;
        private String user_name;
        private String user_password;
        
        @ManyToMany(cascade=CascadeType.ALL)
        @JoinTable(name="user_role3",joinColumns=@JoinColumn(name="user_id"),inverseJoinColumns=@JoinColumn(name="role_id"))
        private Set<Role> roles = new HashSet<Role>(); 
    
        public Set<Role> getRoles() {
            return roles;
        }
        public void setRoles(Set<Role> roles) {
            this.roles = roles;
        }
        public Integer getUser_id() {
            return user_id;
        }
        public void setUser_id(Integer user_id) {
            this.user_id = user_id;
        }
        public String getUser_name() {
            return user_name;
        }
        public void setUser_name(String user_name) {
            this.user_name = user_name;
        }
        public String getUser_password() {
            return user_password;
        }
        public void setUser_password(String user_password) {
            this.user_password = user_password;
        }
        @Override
        public String toString() {
            return "User [user_id=" + user_id + ", user_name=" + user_name
                    + ", user_password=" + user_password + "]";
        }
    }

      Role

    package com.chinasofti.entity;
    
    import java.util.HashSet;
    import java.util.Set;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="T_ROLE3")
    public class Role {
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        private Integer role_id;
        private String role_name;
        private String role_memo;
        
        @ManyToMany(cascade=CascadeType.ALL)
        @JoinTable(name="user_role3",joinColumns=@JoinColumn(name="role_id"),inverseJoinColumns=@JoinColumn(name="user_id"))
        private Set<User> user = new HashSet<User>(); 
        
        public Set<User> getUser() {
            return user;
        }
        public void setUser(Set<User> user) {
            this.user = user;
        }
        public Integer getRole_id() {
            return role_id;
        }
        public void setRole_id(Integer role_id) {
            this.role_id = role_id;
        }
        public String getRole_name() {
            return role_name;
        }
        public void setRole_name(String role_name) {
            this.role_name = role_name;
        }
        public String getRole_memo() {
            return role_memo;
        }
        public void setRole_memo(String role_memo) {
            this.role_memo = role_memo;
        }
        @Override
        public String toString() {
            return "Role [role_id=" + role_id + ", role_name=" + role_name
                    + ", role_memo=" + role_memo + "]";
        }
    }

    三、封装类

    package com.chinasofti.entity;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    
    public class HibernateUtil {
        static Configuration CONFIGURATION = null;
        static SessionFactory SESSION_FACTORY = null;
        static Session SESSION = null;
        static{
            CONFIGURATION = new Configuration();
            CONFIGURATION.configure();
            SESSION_FACTORY = CONFIGURATION.buildSessionFactory();
            SESSION    = SESSION_FACTORY.openSession();
        }
        public static SessionFactory getSessionFactory(){
            return SESSION_FACTORY;
        }
        public static Session openSession(){
            return SESSION;
        }
    }

    四、测试类

    package com.chinasofti.entity;
    
    
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.junit.Test;
    
    
    public class TestAnnotation {
        
        @Test
        public void removeRoleForUser1(){
            Session session = HibernateUtil.openSession();
            session.close();
        }
        
    
        /**
         * 添加用户以、角色
         */
        @Test
        public void testManytoManyInsert(){
            Session session = HibernateUtil.openSession();
            Transaction transaction = session.beginTransaction();
            //创建第一个用户
            User user1 =new User();
            user1.setUser_name("张三");
            user1.setUser_password("zhagsan");
            //创建第二个用户
            User user2 = new User();
            user2.setUser_name("李四");
            user2.setUser_password("lisi");
            //创建第三个用户
            User user3 =new User();
            user3.setUser_name("王五");
            user3.setUser_password("wangwu");
    
            //创建第一个角色
            Role role1 = new Role();
            role1.setRole_name("校长");
            role1.setRole_memo("校长");
            
            //创建第二个角色
            Role role2 = new Role();
            role2.setRole_name("主任");
            role2.setRole_memo("主任");
            
            //创建第三个角色
            Role role3 = new Role();
            role3.setRole_name("门房");
            role3.setRole_memo("门房");
            
            
            //创建第四个角色
            Role role4 = new Role();
            role4.setRole_name("体育老师");
            role4.setRole_memo("体育老师");
            
            
            //把角色放到用户里
            user1.getRoles().add(role1);
            user1.getRoles().add(role2);
            
            user2.getRoles().add(role2);
            user2.getRoles().add(role4);
            
            user3.getRoles().add(role3);
            user3.getRoles().add(role4);
            
            //保存
            session.save(user1);
            session.save(user2);
            session.save(user3);
            
            transaction.commit();
            
            session.close();
        }
    }

    补充:关系/对象映射 多对多关系(@ManyToMany 注释)【重新认识】

  • 相关阅读:
    VS2005中“ASP.NET Web 应用程序”比“ASP.NET 网站”好处多啊
    让你的ASP.NET虚拟主机也支持子网站
    单线程程序避免界面假死
    用什么版本的Oracle
    Windows Forms DataGridView 中合并单元格
    关于asp.net 2.0 的虚拟主机
    RedHat enterprise6.3 samba服务安装和配置
    苹果面试8大难题及答案
    新版编译器编译内核 version `GLIBCXX_3.4.9' not found
    Source insight 支持汇编
  • 原文地址:https://www.cnblogs.com/angelye/p/7464903.html
Copyright © 2011-2022 走看看