Hibernate---注解多对多

Posted Angelye

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 注释)【重新认识】

以上是关于Hibernate---注解多对多的主要内容,如果未能解决你的问题,请参考以下文章

hibernate多对多注解示例

hibernate关于多对多注解配置

Hibernate—— 一对多 和 多对多关联关系映射(xml和注解)总结(转载)

hibernate多对多 一对多 及简单入门

Hibernate多对多中间表数据更新问题

(十三)Hibernate中的多表操作:单向多对多