【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",[email protected](name="user_id"),[email protected](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",[email protected](name="role_id"),[email protected](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 注释)【重新认识】

时间: 2024-10-10 16:12:39

【Hibernate】---【注解】多对多的相关文章

Hibernate注解多对一关联关系

实体类1 package entity; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; @Entity publ

hibernate注解

慕课网:http://www.imooc.com/learn/524 一.类级别注解 简介 使用注解的目的:为了简化繁琐的ORM映射文件(*.hbm)的配置 JPA(Java Persistence API)与hibernate的关系:JPA是标准接口,hibernate是实现(hibernate的功能是jpa的超集,功能更强大) hibernate如何实现与JPA的关系:通过hibernate-annotation.hibernate-entitymanager.hibernate-core三

Hibernate学习一:Hibernate注解CascadeType

http://zy19982004.iteye.com/blog/1721846 ———————————————————————————————————————————————————————— Hibernate学习一:Hibernate注解CascadeType 博客分类: Hibernate hibernate 一.概念 现有一场景:一个管理员可以管理多个网吧,一个网吧可以被多个管理员管理.从中抽象出一个多对多的例子user-bar. 主控方user:多对多里面里面会有第三张表user_b

关于hibernate注解的简单应用

@Override 用途:重写父类的同名方法 单元测试注解 @Test 用途:用于测试 @Before 用途:单测方法走之前执行 @After 用途:单测方法走之后执行 注解的目标:替换小配置.替换hbm文件 @Entity  :标识实体类(被持久化) @Table  :DB层表的名称 @Transient :不持久化某个属性 @Column:数据表中的字段名 @GenerateValue :主键生成策略 -----------------关联--------------------------

【学习笔记】Hibernate 注解 (Y2-1-9)

Hibernate注解 1.什么是注解在类上或者方法上打上其他类型的类型元数据 @标志 使用过的注解: @override  方法重写 @Test Junit 单元测试 @Before 单元测试 @After 单元测试 Hibernate中常用的注解 [email protected] 将一个类声明为持久化类 [email protected] 声明持久化类的标识属性 [email protected] 定义标识属性值的生成策略,默认为native [email protected] 将属性映射

SHOP++ 中Hibernate 注解 用法

最近接触到一款JAVA开源软件(shop++)这是一款电商软件.然后看了这款软件的源代码,发现真的很强大.框架采用的是spring mvc + hibernate + freemarker ,代码结构层次分明,代码封装和重用性也很高.非常适合二次开发.其次重点说说hibernate 注解吧 数据库表采用的是hibernate注解映射的方式.然后略微研究了下,分享一下自己的见解. @Entity说明此类是一个实体映射 @Tabletable用来定义entity主表的name,cataloh,sch

Hibernate注解方式开发实体类

Hibernate注解 1.@Entity(name="EntityName") 必须,name为可选,对应数据库中一的个表 2.@Table(name="",catalog="",schema="") 可选,通常和@Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据库表的信息 name:可选,表示表的名称.默认地,表名和实体名称一致,只有在不一致的情况下才需要指定表名 catalog:可选,表示Cat

hibernate 注解annotation

转自jpa&hibernate注解 物理连接:http://www.blogjava.net/oxidy/archive/2013/06/06/400266.html @Entity(name="EntityName") 必须,name为可选,对应数据库中一的个表 2.@Table(name="",catalog="",schema="") 可选,通常和@Entity配合使用,只能标注在实体的class定义处,表示实体

(转)Hibernate注解使用以及Spring整合

原文转自:http://wanqiufeng.blog.51cto.com/409430/484739 (1)简介:在过去几年里,Hibernate不断发展,几乎成为Java数据库持久性的事实标准.它非常强大.灵活,而且具备了优异的性能.在本文中,我们将了解如何使用Java 5 注释来简化Hibernate代码,并使持久层的编码过程变得更为轻松.传统上,Hibernate的配置依赖于外部 XML 文件:数据库映射被定义为一组 XML 映射文件,并且在启动时进行加载.    在最近发布的几个Hib

Hibernate注解----关联映射注解以及课程总结详解----图片版本

上一篇,记录了Hibernate注解----类级别注解以及属性注解详解 ,我们这一节主要讲解的是Hibernate注解----关联映射注解以及课程总结详解. 本节的主要内容: 第3章 关联映射注解 3-1 本章简介 3-2 实体之间的关系 3-3 一对一单向外键关联(一) 3-4 一对一单向外键关联(二) 3-5 一对一双向外键关联 3-6 一对一单向外键联合主键 3-7 多对一单向外键关联(一) 3-8 多对一单向外键关联(二) 3-9 一对多单向外键关联 3-9 一对多双向外键关联 3-10