hibernate 映射-多对多双向

简介:

hibernate 中的多对多,在数据库中就是一张中间表,

范例:

考试与考试之间是一种多对多的关系:

(1)一个考生可以参加多场考试;

(2)一场考试可以有多个考生参加;

(3)不同的考生可以参加同一场考试;不同的考试可以有相同的考生。

考生类:User,中有成员变量private List<Exam> exams 

考试类:Exam,中有成员变量 private List<User> users

在User.Java 中的配置:

Java代码   收藏代码
  1. @ManyToMany  
  2.     @JoinTable(name = "t_user_exam", joinColumns =  
  3.     { @JoinColumn(name = "user_id") }, inverseJoinColumns =  
  4.     { @JoinColumn(name = "exam_id") })  
  5.     public List<Exam> getExams()  
  6.     {  
  7.         return exams;  
  8.     }  

 在Exam.java 中要配置:

Java代码   收藏代码
  1. @ManyToMany(mappedBy = "exams")  
  2. public List<User> getUsers()  
  3.     {  
  4.         return users;  
  5.     }  

 

创建的中间表的名称是t_user_exam,其中user_id是参考考生id的外键;exam_id是参考考试id的外键。

sql语句:

15:24:37,390 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 - 

    create table t_user_exam (

        user_id integer not null,

        exam_id integer not null

    )

15:24:37,453 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 - 

    alter table t_user_exam 

        add index FK331826084DE43CAB (exam_id), 

        add constraint FK331826084DE43CAB 

        foreign key (exam_id) 

        references Exam (id)

15:24:37,609 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 - 

    alter table t_user_exam 

        add index FK3318260894018D2B (user_id), 

        add constraint FK3318260894018D2B 

        foreign key (user_id) 

        references User (id)

 

单向与双向的区别:

(1)单向,只能从一方导航到另一方,不能反之;即只能从A导航到B,而不能从B导航到A;

双向,可以从一方导航到另一方,反之亦然;即既可以从A导航到B,也可以从B导航到A;

(2)单向,只需要配置导航始发地的类;

双向,两个类都需要配置。

 

注意:

(1)成员变量名称中最好不要有下划线;

(2)成员变量的类型中不要有ArrayList,应该用List 或Set

 

相关文章
|
Java 数据库连接 API
解锁高效开发秘籍:深入探究 Hibernate 如何优雅处理一对多与多对多关系,让数据映射再无烦恼!
【9月更文挑战第3天】Hibernate 是 Java 领域中最流行的 ORM 框架之一,广泛用于处理实体对象与数据库表之间的映射。尤其在处理复杂关系如一对多和多对多时,Hibernate 提供了丰富的 API 和配置选项。本文通过具体代码示例,展示如何使用 `@OneToMany`、`@JoinColumn`、`@ManyToMany` 和 `@JoinTable` 等注解优雅地实现这些关系,帮助开发者保持代码简洁的同时确保数据一致性。
350 4
|
SQL XML 存储
Hibernate框架【五】——基本映射——多对多映射
Hibernate框架【五】——基本映射——多对多映射
379 0
|
Java 数据库连接 数据库
AI 时代风起云涌,Hibernate 实体映射引领数据库高效之路,最佳实践与陷阱全解析!
【8月更文挑战第31天】Hibernate 是一款强大的 Java 持久化框架,可将 Java 对象映射到关系数据库表中。本文通过代码示例详细介绍了 Hibernate 实体映射的最佳实践,包括合理使用关联映射(如 `@OneToMany` 和 `@ManyToOne`)以及正确处理继承关系(如单表继承)。此外,还探讨了常见陷阱,例如循环依赖可能导致的无限递归问题,并提供了使用 `@JsonIgnore` 等注解来避免此类问题的方法。通过遵循这些最佳实践,可以显著提升开发效率和数据库操作性能。
330 0
|
数据库 开发者 Java
Hibernate映射注解的魔力:实体类配置的革命,让你的代码量瞬间蒸发!
【8月更文挑战第31天】Hibernate 是一款出色的对象关系映射框架,简化了 Java 应用与数据库的交互。其映射注解让实体类配置变得直观简洁。本文深入剖析核心概念与使用技巧,通过示例展示如何简化配置。
240 0
|
Java 数据库连接 数据库
hibernate多对多、正向工程创建数据表——访问温馨提示
hibernate多对多、正向工程创建数据表——访问温馨提示
|
缓存 Java 数据库连接
Hibernate或MyBatis:ORM映射、缓存机制等知识讲解梳理
Hibernate或MyBatis:ORM映射、缓存机制等知识讲解梳理
361 0
|
Java 数据库连接 数据库
Hibernate5中实体映射命名策略
Hibernate5中实体映射命名策略
345 0
|
SQL 存储 Java
Hibernate - 继承关联关系映射
Hibernate - 继承关联关系映射
222 0
|
机器学习/深度学习 SQL Java
Hibernate - 多对多关联关系映射
Hibernate - 多对多关联关系映射
193 0
|
SQL Java 关系型数据库
Hibernate - Java 类型, Hibernate 映射类型及 SQL 类型之间的对应关系
Hibernate - Java 类型, Hibernate 映射类型及 SQL 类型之间的对应关系
343 0

热门文章

最新文章