1、在公司一个员工对应多个部门,一个部门对应多个员工,因此部门与员工之间就是多对多的关系。

Person类的代码如下:

package com.mr.cheng.bean;import java.util.Set;import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;import org.hibernate.annotations.Cascade;@Entity
public class Person {private Integer id;private String name;private int age;private double price;private Set<Dept> depts;/*** 多对多由一方来完成,*/@ManyToMany(cascade=CascadeType.ALL)@JoinTable(name="personDeptTable",/*** 这一方的Id*/joinColumns={@JoinColumn(name="personId")},/*** 反转的另外一段的列名,既对方一张表的Id* @return*/inverseJoinColumns={@JoinColumn(name="deptId")})public Set<Dept> getDepts() {return depts;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", age=" + age+ ", price=" + price + ", depts=" + depts + "]";}public void setDepts(Set<Dept> depts) {this.depts = depts;}@Id@GeneratedValuepublic Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}
}

  Dept类的代码如下:

package com.mr.cheng.bean;import java.util.Set;import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;@Entity
@Table(name="deptTable")
public class Dept {private int id;private String name;private Set<Person>persons;@Id@GeneratedValuepublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@ManyToMany(mappedBy="depts")public Set<Person> getPersons() {return persons;}public void setPersons(Set<Person> persons) {this.persons = persons;}
}

2、hibernate.hbm.xml配置如下:

<?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="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql://localhost/test</property><property name="connection.username">root</property><property name="connection.password">root</property><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!--<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><property name="connection.url">jdbc:oracle:thin:@localhost:1521:SXT</property><property name="connection.username">scott</property><property name="connection.password">tiger</property><property name="dialect">org.hibernate.dialect.OracleDialect</property>--><!-- JDBC connection pool (use the built-in) --><property name="connection.pool_size">1</property><!-- Enable Hibernate's automatic session context management --><property name="current_session_context_class">thread</property><!-- Disable the second-level cache  --><property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property><!-- Echo all executed SQL to stdout --><property name="show_sql">true</property><property name="format_sql">true</property><mapping class="com.mr.cheng.bean.Dept" /><mapping class="com.mr.cheng.bean.Person" /></session-factory></hibernate-configuration>

  

3、测试代码如下:

package com.mr.cheng.test;import java.util.Date;
import java.util.HashSet;import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;import com.mr.cheng.bean.Dept;
import com.mr.cheng.bean.Person;public class HibernateTest {private static SessionFactory sessionFactory;//@BeforeClasspublic static void beforeClass() {sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();}//@AfterClasspublic static void afterClass() {sessionFactory.close();}@Testpublic void testSchemaExport() {new SchemaExport(new AnnotationConfiguration().configure()).create(true, true);}public static void main(String[] args) {beforeClass();}/*** 多对多单向*/@Testpublic void testManyToManyAddPersonAndDept(){new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();Session session = sessionFactory.openSession();session.beginTransaction();Dept dept = new Dept();dept.setName("财务部");Dept dept1 = new Dept();dept1.setName("财务部");Person person = new Person();person.setName("A111");person.setAge(33);person.setPrice(33);Person person1 = new Person();person1.setName("A111");person1.setAge(33);person1.setPrice(33);person.setDepts(new HashSet<Dept>());person1.setDepts(new HashSet<Dept>());person.getDepts().add(dept);person.getDepts().add(dept1);person1.getDepts().add(dept);person1.getDepts().add(dept1);session.save(person1);session.save(person);/*session.save(dept1);session.save(dept);*/session.getTransaction().commit();}/*** 多对多单向查询 Person 一方*/@Testpublic void testManyToManyQueryPerson(){new SchemaExport(new AnnotationConfiguration().configure()).create(false, false);sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();Session session = sessionFactory.openSession();session.beginTransaction();Person p = (Person) session.load(Person.class, 1);System.out.println(p.getDepts());session.getTransaction().commit();}/*** 多对多单向查询 Dept 一方*/@Testpublic void testManyToManyQueryDept(){new SchemaExport(new AnnotationConfiguration().configure()).create(false, false);sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();Session session = sessionFactory.openSession();session.beginTransaction();Dept dept = (Dept) session.load(Dept.class, 1);System.out.println(dept.getPersons());session.getTransaction().commit();}@Testpublic void testManyToManyAddPersonAndDept1(){sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();Session session = sessionFactory.openSession();session.beginTransaction();Dept dept = new Dept();dept.setName("财务部");Dept dept1 = new Dept();dept1.setName("财务部");Person person = new Person();person.setName("A111");person.setAge(33);person.setPrice(33);Person person1 = new Person();person1.setName("A111");person1.setAge(33);person1.setPrice(33);dept1.setPersons(new HashSet());dept.setPersons(new HashSet());dept1.getPersons().add(person1);dept1.getPersons().add(person);/*  session.save(person1);session.save(person);*/session.save(dept1);session.save(dept);session.getTransaction().commit();}
}

  

转载于:https://www.cnblogs.com/chengAddress/p/4365953.html

hibernate 多对多注解配置相关推荐

  1. Hibernate多对多关系配置

    需求:一个用户可以有多个角色,一个角色也可以被多个用户选择 POJO: public class User {private Long user_id;private String user_code ...

  2. spring + hibernate + 实体类 注解配置代码

    <?xml version="1.0" encoding="UTF-8"?> <beansxmlns="http://www.spr ...

  3. Hibernate多对多映射 - 连接表

    Hibernate多对多映射 - 连接表 今天我们将使用XML和注释配置来研究Hibernate多对多映射.之前我们看过如何在Hibernate中实现One To One和One To Many映射. ...

  4. Hibernate 注解配置

    近几年来,注解方式的配置因其简单易用的特点深受广大程序员的青睐,Hibernate也添加了对注解配置的支持.接下来我们就以论坛系统为例来讲解基于注解配置实体类和表的映射关系,以及实体和实体的关联关系. ...

  5. hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系

    前面几篇都是介绍的用配置文件来实现实体类到数据库表的映射,这种方式是比较麻烦的,每一个pojo类都需要写一个相应的*.hbm.xml,无疑增加了很多代码量,不过也有优点就是利于维护,为了方便开发,Hi ...

  6. Hibernate实例--注解配置表映射

    本实例使用Hibernate注解的方式实现一个实体类与数据库表持久化操作. 一.Hibernate注解详细介绍 实体Bean,每个持久化POJO类都是一个实体Bean, 通过在类的定义中使用 @Ent ...

  7. Hibernate注解开发-PO类注解配置

    在hibernate中我们使用注解,可以帮助我们简化hbm文件配置. hibernate.cfg.xml配置 <?xml version="1.0" encoding=&qu ...

  8. JAVA日记之mybatis-3一对一,一对多,多对多xml与注解配置 ----喝最烈的酒.

    1.Mybatis多表查询 1.1 一对一查询 1.1.1 一对一查询的模型 用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户 一对一查询的需求:查询一个订单,与此同时查询出该订单 ...

  9. Hibernate 教程(二)[Hibernate对象的,xml配置,注解配置]

    准备 数据库建表(Hibernate可以自动生成表,和对应字段,但是不能给字段添加注释,所以选择手动建表) -- 创建表 CREATE TABLE `Event`( `id` INT AUTO_INC ...

最新文章

  1. 学习JS面向对象成果,借国庆发布个最新作品与大家交流
  2. js的eval函数解析后台返回的json数据时为什加上圆括号eval((+data+)),而HTML页面定义的数据不用...
  3. 11-2 操作系统发展
  4. 2021牛客暑期多校训练营7 J-xay loves Floyd(最短路+bitset优化集合交)
  5. rtosucos和linux区别,为什么我们需要uCos?带你透彻理解RTOS
  6. 编译器、Make和CMake之间的关系
  7. xampp 中 mysql的相关配置
  8. 我的MVVM框架 v3教程——todos例子
  9. NWT失败反省:说别人脑子进水了,汝脑子有没有进水?
  10. 波束形成matlab程序,mVDR波束形成matlab程序
  11. 电信系统服务器地址,电信高速dns服务器地址谁知道?
  12. HTML+CSS网页设计期末课程大作业 【茶叶文化网站设计题材】web前端开发技术 web课程设计 网页规划与设计
  13. 每日一言:山还是山,你还是你
  14. 2023最新JDK下载、安装与配置教程(jdk17.0.5以及jdk11.0.17)
  15. 测试笔试题汇总(测试开发)
  16. Windows Embedded CE和Windows Mobile下ActiveSync开发
  17. 独家 | 2019届互联网校招高薪清单出炉
  18. 电商客服系统功能需求点-实现电商多商家客服系统
  19. 2.12 真实数据的噪声平滑处理
  20. ubuntu下sogou输入法的输入框只显示英文不显示中文的解决方法

热门文章

  1. 软考信息系统项目管理师_项目范围管理1---软考高级之信息系统项目管理师011
  2. Element-UI-的布局和容器---Element-UI工作笔记003
  3. 架构设计工作笔记001---智慧城市项目架构设计中应该注意的问题
  4. mybatis工作总结001_mybatis中_parameter使用和常用sql
  5. ASP.Net学习笔记015--ASP.Net中使用Cookie
  6. JSF学习笔记--JSF简介,JSF第一个应用程序
  7. 之前安装vmware player卸载失败出现msi '' failed,就安装不vmware station
  8. 用汇编的眼光看C++(开篇)
  9. mysql 三表inner join_MySql的join(连接)查询 (三表 left join 写法)
  10. js页面传值php页面,不同页面,php如何js传值?