一、核心配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  5. <hibernate-configuration>
  6. <session-factory>
  7. <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  8. <property name="hibernate.connection.password">root</property>
  9. <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
  10. <property name="hibernate.connection.username">root</property>
  11.  
  12. <property name="hibernate.show_sql">true</property>
  13. <property name="hibernate.format_sql">true</property>
  14. <property name="hibernate.hbm2ddl.auto">update</property>
  15. <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  16. <property name="current_session_context_class">thread</property>
  17. <!--
  18. <mapping resource="com/chinasofti/entity/User.hbm.xml" />
  19. <mapping resource="com/chinasofti/entity/Role.hbm.xml" />
  20. -->
  21. <mapping class="com.chinasofti.entity.User"/>
  22. <mapping class="com.chinasofti.entity.Role"/>
  23. </session-factory>
  24. </hibernate-configuration>

二、实体类

  User

  1. package com.chinasofti.entity;
  2.  
  3. import java.util.HashSet;
  4. import java.util.Set;
  5.  
  6. import javax.persistence.CascadeType;
  7. import javax.persistence.Entity;
  8. import javax.persistence.GeneratedValue;
  9. import javax.persistence.GenerationType;
  10. import javax.persistence.Id;
  11. import javax.persistence.JoinColumn;
  12. import javax.persistence.JoinTable;
  13. import javax.persistence.ManyToMany;
  14. import javax.persistence.OneToMany;
  15. import javax.persistence.Table;
  16.  
  17. @Entity
  18. @Table(name="T_USER3")
  19. public class User {
  20. @Id
  21. @GeneratedValue(strategy=GenerationType.IDENTITY)
  22. private Integer user_id;
  23. private String user_name;
  24. private String user_password;
  25.  
  26. @ManyToMany(cascade=CascadeType.ALL)
  27. @JoinTable(name="user_role3",joinColumns=@JoinColumn(name="user_id"),inverseJoinColumns=@JoinColumn(name="role_id"))
  28. private Set<Role> roles = new HashSet<Role>();
  29.  
  30. public Set<Role> getRoles() {
  31. return roles;
  32. }
  33. public void setRoles(Set<Role> roles) {
  34. this.roles = roles;
  35. }
  36. public Integer getUser_id() {
  37. return user_id;
  38. }
  39. public void setUser_id(Integer user_id) {
  40. this.user_id = user_id;
  41. }
  42. public String getUser_name() {
  43. return user_name;
  44. }
  45. public void setUser_name(String user_name) {
  46. this.user_name = user_name;
  47. }
  48. public String getUser_password() {
  49. return user_password;
  50. }
  51. public void setUser_password(String user_password) {
  52. this.user_password = user_password;
  53. }
  54. @Override
  55. public String toString() {
  56. return "User [user_id=" + user_id + ", user_name=" + user_name
  57. + ", user_password=" + user_password + "]";
  58. }
  59. }

  Role

  1. package com.chinasofti.entity;
  2.  
  3. import java.util.HashSet;
  4. import java.util.Set;
  5.  
  6. import javax.persistence.CascadeType;
  7. import javax.persistence.Entity;
  8. import javax.persistence.GeneratedValue;
  9. import javax.persistence.GenerationType;
  10. import javax.persistence.Id;
  11. import javax.persistence.JoinColumn;
  12. import javax.persistence.JoinTable;
  13. import javax.persistence.ManyToMany;
  14. import javax.persistence.ManyToOne;
  15. import javax.persistence.Table;
  16.  
  17. @Entity
  18. @Table(name="T_ROLE3")
  19. public class Role {
  20. @Id
  21. @GeneratedValue(strategy=GenerationType.IDENTITY)
  22. private Integer role_id;
  23. private String role_name;
  24. private String role_memo;
  25.  
  26. @ManyToMany(cascade=CascadeType.ALL)
  27. @JoinTable(name="user_role3",joinColumns=@JoinColumn(name="role_id"),inverseJoinColumns=@JoinColumn(name="user_id"))
  28. private Set<User> user = new HashSet<User>();
  29.  
  30. public Set<User> getUser() {
  31. return user;
  32. }
  33. public void setUser(Set<User> user) {
  34. this.user = user;
  35. }
  36. public Integer getRole_id() {
  37. return role_id;
  38. }
  39. public void setRole_id(Integer role_id) {
  40. this.role_id = role_id;
  41. }
  42. public String getRole_name() {
  43. return role_name;
  44. }
  45. public void setRole_name(String role_name) {
  46. this.role_name = role_name;
  47. }
  48. public String getRole_memo() {
  49. return role_memo;
  50. }
  51. public void setRole_memo(String role_memo) {
  52. this.role_memo = role_memo;
  53. }
  54. @Override
  55. public String toString() {
  56. return "Role [role_id=" + role_id + ", role_name=" + role_name
  57. + ", role_memo=" + role_memo + "]";
  58. }
  59. }

三、封装类

  1. package com.chinasofti.entity;
  2.  
  3. import org.hibernate.Session;
  4. import org.hibernate.SessionFactory;
  5. import org.hibernate.cfg.Configuration;
  6.  
  7. public class HibernateUtil {
  8. static Configuration CONFIGURATION = null;
  9. static SessionFactory SESSION_FACTORY = null;
  10. static Session SESSION = null;
  11. static{
  12. CONFIGURATION = new Configuration();
  13. CONFIGURATION.configure();
  14. SESSION_FACTORY = CONFIGURATION.buildSessionFactory();
  15. SESSION = SESSION_FACTORY.openSession();
  16. }
  17. public static SessionFactory getSessionFactory(){
  18. return SESSION_FACTORY;
  19. }
  20. public static Session openSession(){
  21. return SESSION;
  22. }
  23. }

四、测试类

  1. package com.chinasofti.entity;
  2.  
  3. import org.hibernate.Session;
  4. import org.hibernate.Transaction;
  5. import org.junit.Test;
  6.  
  7. public class TestAnnotation {
  8.  
  9. @Test
  10. public void removeRoleForUser1(){
  11. Session session = HibernateUtil.openSession();
  12. session.close();
  13. }
  14.  
  15. /**
  16. * 添加用户以、角色
  17. */
  18. @Test
  19. public void testManytoManyInsert(){
  20. Session session = HibernateUtil.openSession();
  21. Transaction transaction = session.beginTransaction();
  22. //创建第一个用户
  23. User user1 =new User();
  24. user1.setUser_name("张三");
  25. user1.setUser_password("zhagsan");
  26. //创建第二个用户
  27. User user2 = new User();
  28. user2.setUser_name("李四");
  29. user2.setUser_password("lisi");
  30. //创建第三个用户
  31. User user3 =new User();
  32. user3.setUser_name("王五");
  33. user3.setUser_password("wangwu");
  34.  
  35. //创建第一个角色
  36. Role role1 = new Role();
  37. role1.setRole_name("校长");
  38. role1.setRole_memo("校长");
  39.  
  40. //创建第二个角色
  41. Role role2 = new Role();
  42. role2.setRole_name("主任");
  43. role2.setRole_memo("主任");
  44.  
  45. //创建第三个角色
  46. Role role3 = new Role();
  47. role3.setRole_name("门房");
  48. role3.setRole_memo("门房");
  49.  
  50. //创建第四个角色
  51. Role role4 = new Role();
  52. role4.setRole_name("体育老师");
  53. role4.setRole_memo("体育老师");
  54.  
  55. //把角色放到用户里
  56. user1.getRoles().add(role1);
  57. user1.getRoles().add(role2);
  58.  
  59. user2.getRoles().add(role2);
  60. user2.getRoles().add(role4);
  61.  
  62. user3.getRoles().add(role3);
  63. user3.getRoles().add(role4);
  64.  
  65. //保存
  66. session.save(user1);
  67. session.save(user2);
  68. session.save(user3);
  69.  
  70. transaction.commit();
  71.  
  72. session.close();
  73. }
  74. }

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

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

  1. Hibernate 注解多对一 要求在多那边产生一个外键而不会另外产生一个表

    在使用hibernate注解的时候,我们映射一对多时,有时候莫名其妙的产生了两张表,其中一张表是A_B,这并不符合数据库中多的一方放置一个外键的原则,那么如何控制只产生一个表呢,请看下面的例子: 多的 ...

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

    上一篇,记录了Hibernate注解----类级别注解以及属性注解详解 ,我们这一节主要讲解的是Hibernate注解----关联映射注解以及课程总结详解. 本节的主要内容: 第3章 关联映射注解 3 ...

  3. Hibernate注解使用以及Spring整合

    Hibernate注解使用以及Spring整合 原文转自:http://wanqiufeng.blog.51cto.com/409430/484739 (1) 简介: 在过去几年里,Hibernate ...

  4. 【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目

    研究,百度,查资料+好友帮助,使用MyEcplise2015工具,通过maven搭建hibernate+springMVC+spring的项目,数据库采用MySql5.5 不过使用的版本会在项目搭建过 ...

  5. hibernate注解的简单应用

    注解代替了我们用的*.hbm.xml文件.简少了我们的代码量:应用简单. @Override 用途:重写父类的同名方法 单元测试注解 @Test 用途:用于测试 @Before 用途:单测方法走之前执 ...

  6. 关于hibernate注解的简单应用

    @Override 用途:重写父类的同名方法 单元测试注解 @Test 用途:用于测试 @Before 用途:单测方法走之前执行 @After 用途:单测方法走之后执行 注解的目标:替换小配置.替换h ...

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

    Hibernate注解 1.什么是注解在类上或者方法上打上其他类型的类型元数据 @标志 使用过的注解: @override  方法重写 @Test Junit 单元测试 @Before 单元测试 @A ...

  8. Hibernate注解与JPA

    Hibernate注解与JPA - charming的专栏 - CSDN博客http://blog.csdn.net/zxc123e/article/details/51499652 之前记录的一些东 ...

  9. Hibernate注解开发、注解创建索引

    1.注解的目的 简化繁琐的ORM映射文件(*.hbm)的配置 2.JPA和hibernate的关系 JPA:java persistence API,JPA注解是JavaEE的标准和规范. 两者的关系 ...

  10. Hibernate学习一:Hibernate注解CascadeType

    http://zy19982004.iteye.com/blog/1721846 ———————————————————————————————————————————————————————— Hi ...

随机推荐

  1. info - 阅读 info 文档

    SYNOPSIS 总览 info [OPTION]... [MENU-ITEM...] DESCRIPTION 描述 阅读 info 格式的文档. OPTIONS 选项 --apropos=STRIN ...

  2. linux如何配置使用sendEmail发送邮件

    sendEmail是一个轻量级.命令行的SMTP邮件客户端.如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择.使用简单并且功能强大.这个被设计用在php.bash.perl和web ...

  3. Webdriver处理页面元素的方式

    Webdriver执行JavaScript代码的方式 WebDriver driver = new ChromeDriver(); JavascriptExecutor jse = (Javascri ...

  4. Linux 系统分类

    linux系统,主要分debian系和redhat系,还有其它自由的发布版本. 1.debian系主要有Debian,Ubuntu,Mint等及其衍生版本: 2.redhat系主要有RedHat,Fe ...

  5. 磁盘空间命令df/du/free

    1.df 显示文件系统大小 -h 以易读方式显示 -k KB -m MB -a 显示所有 2. du 显示文件大小 -h 只显示目录 -a 所有 -s 只显示总量 3.free 显示内存 -k -m ...

  6. 【CF896C】Willem, Chtholly and Seniorious

    ODT模板题,ODT适合随机数据下具有维护区间推平操作的序列维护题目,时间复杂度较为玄学.. 代码如下 #include <bits/stdc++.h> #define pb push_b ...

  7. 弹弹弹,弹走鱼尾纹的弹出菜单(vue)

    前言 上一篇面试的总结,大家看的还行,因为量很大,错误在所难免,希望大家发现错误了可以告诉我一声,我的邮箱是236490794@qq.com,一个小前端的希望. 言归正传 我们老样子直接先上效果图再开 ...

  8. numpy模块、matplotlib模块、pandas模块

    目录 1. numpy模块 2. matplotlib模块 3. pandas模块 1. numpy模块 numpy模块的作用 用来做数据分析,对numpy数组(既有行又有列)--矩阵进行科学计算 实 ...

  9. 【织梦手机端仿站】和PC一个后台

    卸载插件,织梦默认带手机站,无需复杂使用插件以后不方便升级.织梦2015年6月8日更新后,就添加了很多针对手机移动端的设计,最大的设计就是添加了生成二维码的织梦标签和织梦手机模板功能,织梦更新后,默认 ...

  10. js 页面 保持状态 的方法

    A -> B 带参数进去B页面, 刷新B页面还  保持状态 单机下一页, 改变请求参数, A->B 不带参数进去B页面 (不存在)当前状态保存在cookies中, 刷新页面,判断cooki ...