`
tsinglongwu
  • 浏览: 231516 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

(转)多对多关系(@ManyToMany 注释)

阅读更多

old:

@ManyToMany 注释:表示此类是多对多关系的一边,mappedBy 属性定义了此类为双向关系的维护端,注意:mappedBy 属性的值为此关系的另一端的属性名

例如,在Student类中有如下方法:
被控方:
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "students")
public Set<Teacher> getTeachers() {
return teachers;
}
那么这里的“students”就是Teachers的一个属性,通常应该是这样的:
Set<Student> students;
另一端的getStudents方法如下所示:
主控方:
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinTable(name = "Teacher_Student",
joinColumns = {@JoinColumn(name = "Teacher_ID", referencedColumnName = "teacherid")},
inverseJoinColumns = {@JoinColumn(name = "Student_ID", referencedColumnName ="studentid")})
public Set<Student> getStudents() {
return students;
}

说明:
@ManyToMany 注释表示Teacher 是多对多关系的一端。

@JoinTable 描述了多对多关系的数据表关系。name 属性指定中间表名称;joinColumns 定义中间表与Teacher 表的外键关系。上面的代码中,中间表Teacher_Student的Teacher_ID 列是Teacher 表的主键列对应的外键列;inverseJoinColumns 属性定义了中间表与另外一端(Student)的外键关系。

可以通过上面的定义看到有三个表学生表--老师表--老师学生中间表

 

 

=================================

new:(个人观点,,欢迎大家一起来讨论此问题)

以上提到主控方和被控方。。本人不赞同这种写法:
理由是: 1.既然是多对多关系。。为什么还要分主动方和被动方?
            2.为什么需要删除老师后才级联中间表。。。请注意:以上定义方法时,删除学生是无法级联删除中间表的。
正确的写法应该是两边都用主控方的写法:
只是joinColumns和inverseJoinColumns属性的地方互换就可以了

 

总结:
个人的定义:
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinTable(name = "Teacher_Student",
joinColumns = {@JoinColumn(name = "Student_ID", referencedColumnName = "studentid")},
inverseJoinColumns = {@JoinColumn(name = "Teacher_ID", referencedColumnName ="teacherid")})
public Set<Teacher> getTeachers() {
return teachers;
}
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinTable(name = "Teacher_Student",
joinColumns = {@JoinColumn(name = "Teacher_ID", referencedColumnName = "teacherid")},
inverseJoinColumns = {@JoinColumn(name = "Student_ID", referencedColumnName ="studentid")})
public Set<Student> getStudents() {
return students;
}


摘自:http://blog.csdn.net/gabriel80/archive/2009/06/11/4260923.aspx

 

分享到:
评论

相关推荐

    hibernate(多对多关系映射)

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系映射是一种常见的数据库交互模式,它用于表示两个实体之间复杂的关系。在这个场景中,一个实体可以与多个其他实体相关联,反之亦然。例如,在学生和课程...

    hibernate中的注释学习,以及注释帮助

    2. `@ManyToMany`: 表示多对多的关系,通常需要一个中间表来维护两个实体之间的关系。 ```java @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @...

    Java注释全解文档.zip

    - `@OneToMany`、`@ManyToOne`、`@OneToOne`、`@ManyToMany`:定义对象关系映射。 - `@Transient`:标记为非持久化字段。 4. **Struts2注解** - `@Action`:定义一个Action类,关联URL和执行方法。 - `@Results...

    hibernate-commons-annotations-3.1.0.GA

    例如,@ManyToOne表示一对多的关系,@OneToOne表示一对一的关系,@OneToMany则用于处理多对一的关联,而@ManyToMany则用于处理多对多的复杂关联。这些注解使得对象关系的映射变得直观且易于维护。 此外,该版本还...

    hibernate注释源程序

    6. **@ManyToOne, @OneToMany, @OneToOne, @ManyToMany**: 这些注解用于定义对象间的关联关系,例如一对一、一对多、多对一和多对多。 7. **@JoinColumn**: 在关联关系中,用于指定外键所在的列。 8. **@Temporal*...

    JAP(java持久化注释).rar

    - `@ManyToOne`, `@OneToOne`, `@OneToMany`, `@ManyToMany`: 这些注解用于处理对象间的关联关系,如一对一、一对多、多对一和多对多关系。 - `@JoinColumn`: 用于定义外键列,指定关系的引用字段。 4. **查询** ...

    oracle 表转实体类工具

    对于复杂的表关系,比如一对一、一对多、多对多关系,工具也能智能解析并生成关联的注解,如@OneToOne、@OneToMany、@ManyToMany等,确保实体类能够正确地反映出数据库中的关系。 例如,如果你有一个名为`employees...

    Hibernate 注解大全

    9. `@ManyToMany`: 表示多对多关系,通常需要通过中间表进行映射。 ```java @ManyToMany @JoinTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name ...

    EJB3.0注释小结

    8. **@OneToMany**、**@ManyToOne** 和 **@OneToOne**:这些注解用于声明一对多、多对一和一对一的关系。可以设置`mappedBy`、`cascade`和`fetch`属性来控制关联行为和懒加载。 9. **@Temporal(value=TemporalType....

    struts2+hibernate+Spring 框架 关于注释用法说明

    - `@OneToMany`, `@ManyToOne`, `@OneToOne`, `@ManyToMany`: 描述实体间的关联关系。 3. **Spring注解**: - `@Component`: 基本的组件注解,用于标记为Spring管理的bean。 - `@Service`: 通常用于业务层,是@...

    annotation(注释)版本的hibernate

    本文将深入探讨"注释版本的Hibernate",结合具体实例,帮助读者理解如何使用注解来实现对象关系映射(ORM)。 一、Hibernate概述 Hibernate是一个开源的对象关系映射框架,它允许开发者用面向对象的方式处理数据库...

    EJB 3.0学习之实体Bean

    此外,EJB 3.0还支持`@ManyToOne`(多对一)、`@OneToOne`(一对一)和`@ManyToMany`(多对多)关系,它们同样通过注解进行声明和配置。这些关系的管理大大简化了,使得开发者可以更专注于业务逻辑,而不是底层的...

    hibernate-annotations-3.4.0.GA and hibernate-entitymanager-3.4.0.GA

    - `@OneToMany`, `@ManyToMany`: 描述多对一或多对多的关系,通常配合`@JoinTable`定义关联表。 - `@JoinColumn`: 定义外键字段,包括外键名、引用的列名等。 4. **实体生命周期管理** - `@PrePersist`, `@...

    Hibernate集合关系映射及one-one,one-many,many-many示例(带注释)

    本程序包含: hibenate 上传图片,二进制数据,大文本,集合映射的多种关系,onetoone,ontomany,manytomany等关系详细代码示例以及注释,全部由本人测试通过,对理解hibernate配置有极大帮助。

    EJB.rar_EJB3_EJB3.0_ejb

    同时,`@GeneratedValue`用于自动生成主键,`@OneToMany`、`@ManyToOne`、`@ManyToMany`和`@OneToOne`用于处理多对一、一对多、多对多和一对一的关系。 ### 4. 依赖注入 依赖注入(DI)是EJB 3.0的另一个重要特性,...

    hibernate_test5.zip

    1. **关联映射**:通过`@OneToOne`、`@OneToMany`、`@ManyToOne`、`@ManyToMany`等注解定义实体间的关联关系。 2. **懒加载与即时加载**:使用`@LazyCollection(LazyCollectionOption.EXTRA)`实现懒加载,避免查询...

    hibernate实体生成工具

    - `@ManyToOne`、`@OneToOne`、`@OneToMany`、`@ManyToMany`:用于关联映射,表示多对一、一对一、一对多、多对多的关系。 - `@JoinColumn`:用于定义外键列。 ### 总结 `hibernate实体生成工具`是提升开发效率的...

    hibenate实例

    Hibernate提供了多种映射策略,如单一映射、多对一、一对多、多对多等,满足不同数据关系的映射需求。例如,`@OneToOne`、`@ManyToOne`、`@OneToMany`、`@ManyToMany`等注解用于标注实体类之间的关系。 在`jee2-...

    SpringMVC+JPA 注解开发 maven

    对于字段,`@Column`定义列属性,`@OneToMany`、`@ManyToOne`、`@OneToOne`和`@ManyToMany`处理关联关系。 在SpringMVC中集成JPA,通常会使用Spring Data JPA,它提供了基于方法的声明式查询,通过接口方法名即可...

Global site tag (gtag.js) - Google Analytics