- 浏览: 57073 次
- 性别:
- 来自: 北京
文章分类
最新评论
annotation方式:
一。编写实体类,双向关联则应双方都有装对方的容器
注意配置mappedBy,以对方类属性为主导
二。
设置注释@ManyToMany,@JoinTable则设置中间表,name设置名称,joinColumns设置中间表列指向当前类ID,inverseJoinColumns设置中间表列指向对方类ID
三。设置hibernate.cfg.xml
xml方式:
配置双方xml文件
双方配置集合属性,name配置本类属性,table配置中间表名(双方必一致,否则产生两张表),key配置中间表列指向本类ID。
many-to-many 配置包含类,column配置中间表列指向对方表ID
测试结果
一。编写实体类,双向关联则应双方都有装对方的容器
@Entity public class Student{ private int id; private String name; private Set<Teacher> students =new HashSet<Teacher>(); @Id @GeneratedValue public int getId() { return id; } @ManyToMany(mappedBy="students") public Set<Teacher> getStudents() { return students; } public void setStudents(Set<Teacher> students) { this.students = students; } public String getName() { return name; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } }
注意配置mappedBy,以对方类属性为主导
二。
@Entity public class Teacher { private int id; private String name; private Set<Student> students =new HashSet<Student>(); @Id @GeneratedValue public int getId() { return id; } @ManyToMany @JoinTable(name="t_s", joinColumns={@JoinColumn(name="teacher_id")}, inverseJoinColumns={@JoinColumn(name="student_id")} ) public Set<Student> getStudents() { return students; } public void setStudents(Set<Student> students) { this.students = students; } public String getName() { return name; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } }
设置注释@ManyToMany,@JoinTable则设置中间表,name设置名称,joinColumns设置中间表列指向当前类ID,inverseJoinColumns设置中间表列指向对方类ID
三。设置hibernate.cfg.xml
<mapping class="org.hibernate.tutorial.domain.Teacher"/> <mapping class="org.hibernate.tutorial.domain.Student"/>
xml方式:
配置双方xml文件
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="org.hibernate.tutorial.domain"> <class name="Teacher" > <id name="id" column="teacherId"> <generator class="native"/> </id> <property name="name"></property> <set name="students" table="t_s"> <key column="teacher_Id"></key> <many-to-many class="org.hibernate.tutorial.domain.Student" column="student_Id"/> </set> </class> </hibernate-mapping>
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="org.hibernate.tutorial.domain"> <class name="Student" > <id name="id" column="studentId"> <generator class="native"/> </id> <property name="name"></property> <set name="students" table="t_s"> <key column="student_Id"></key> <many-to-many class="org.hibernate.tutorial.domain.Student" column="teacher_Id"/> </set> </class> </hibernate-mapping>
双方配置集合属性,name配置本类属性,table配置中间表名(双方必一致,否则产生两张表),key配置中间表列指向本类ID。
many-to-many 配置包含类,column配置中间表列指向对方表ID
测试结果
create table Student ( studentId integer not null auto_increment, name varchar(255), primary key (studentId) ) create table Teacher ( teacherId integer not null auto_increment, name varchar(255), primary key (teacherId) ) create table t_s ( teacher_Id integer not null, student_Id integer not null, primary key (student_Id, teacher_Id) ) alter table t_s add index FK_t2s4kp3kjctswb718yn0ny9ck (student_Id), add constraint FK_t2s4kp3kjctswb718yn0ny9ck foreign key (student_Id) references Student (studentId) alter table t_s add index FK_q8pyhjtlr4wxothocdby56ttk (teacher_Id), add constraint FK_q8pyhjtlr4wxothocdby56ttk foreign key (teacher_Id) references Teacher (teacherId) alter table t_s add index FK_q8pyhjtlr4wxothocdby56ttk (teacher_Id), add constraint FK_q8pyhjtlr4wxothocdby56ttk foreign key (teacher_Id) references Student (studentId)
发表评论
-
hibernate二级和查询缓存使用
2014-03-15 16:24 617二级缓存 一。先导入解压后hibernate-release ... -
多对多单向关联(annotation&xml)
2014-02-26 22:00 413annotation方式: 一。编写多方实体类: @Ent ... -
一对多(多对一)双向关联(annotation&xml)
2014-02-25 21:11 559annotation方式: 一、编写一方类 @Entity ... -
一对多单向关联(annotation&xml)
2014-02-25 19:03 297数据库:两张表,多方加外键 一。编写多方类 @Ent ... -
多对一单向关联(annotation&xml)
2014-02-24 20:07 439数据库:两张表,在多方加键 一、编写一方实体类 pack ... -
组件映射
2014-02-23 22:39 443组件映射:在数据库中 ... -
一对一双向外键联合主键(annotation方式)
2014-02-12 21:39 538主键类 package org.hibernate.tut ... -
一对一双向外键关联(xml方式)
2014-02-11 21:43 421二。xml方式 编写具有对应属性的类 package or ... -
一对一双向外键关联(annotation方式)
2014-02-11 20:04 391一。annotation方式 package org.hi ... -
hibernate一对一(外键)
2014-01-19 21:11 470一.编写实体 @Entity public class ... -
hibernate简单使用
2013-12-06 23:13 381一.写javaBean package org.hib ...
相关推荐
本主题将深入探讨使用Hibernate进行多对多双向关联的实现,既可以通过注解(Annotation)方式,也可以通过XML配置文件来完成。 首先,我们来看多对多关联的基本概念。在数据库设计中,当两个实体之间存在多个实例...
总之,理解和熟练运用Hibernate的一对多、多对一以及双向关联,是提升Java企业级应用开发效率的关键。通过注解或XML配置,开发者可以灵活地定义实体间的关联,实现数据的持久化。同时,注意级联操作、懒加载策略等...
同时,为了实现双向关联,需要在每个实体中添加对对方的引用,并使用`@MapsId`或`@PrimaryKeyJoinColumn`来指定外键列。 ```java // User类 public class User { @OneToOne(mappedBy = "user") private ...
在Java的持久化框架中,Hibernate是一个非常重要的工具,它提供了强大的对象关系映射(ORM)功能,使得开发者...此外,由于多对多关系可以转换为两个一对多关系,因此这个案例对于理解多对多关系的处理也有一定帮助。
在Hibernate中,一对一关联可以是单向或双向的。在这个场景中,我们讨论的是单向关联,即只有一个实体知道这个关联关系。 **注解方式实现一对一单向外键关联** 1. **定义实体类**:首先,我们需要创建两个实体类,...
根据给定文件的信息,本文将详细介绍...以上内容仅覆盖了一对一的几种常见关联方式及其配置方法,接下来还可以进一步探讨其他类型的关系映射,包括一对多、多对多等,以及这些关系在Hibernate中的具体实现方式。
同时,还需要在`Teacher`类中添加一个`List<Student>`字段,用`@OneToMany`注解来实现一对多关系,形成双向关联。 3. **多对多关系**: 学生和班级的关系可以是多对多,因为一个学生可以属于多个班级,反过来,一...
- **双向关联**:在两端实体中都声明关联关系。 - **集合映射**: - 集合类型可以通过`@ElementCollection`注解来映射。 - 复杂类型的集合可以通过嵌套实体类的方式来实现。 - **级联操作**: - 使用`@Cascade`...
在Java持久化框架Hibernate中,一对多映射...总之,Hibernate的一对多映射配置提供了灵活的方式,允许开发者根据需求选择XML或注解方式进行关联实体的定义。理解并正确配置这些关系对于实现高效的数据库操作至关重要。
- **@ManyToOne**: 多对一关联,通常需要配合`@JoinColumn`指定关联信息。 - **@ManyToMany**: 多对多关联,需要通过中间表实现,使用`@JoinTable`定义中间表。 5. **懒加载与立即加载(@LazyCollection)** - `@...
- `@ManyToMany`表示多对多的关系,两个实体类之间可以有多条双向连接。 4. 集合映射注解:`@ElementCollection`用于非关联对象的集合,如字符串或简单类型的集合。 5. 注解式继承:通过`@Inheritance`和`@...
`mappedBy`在双向一对多或多对一关系中使用,表示关系的维护者。它用于指定哪个实体负责维护关联关系,通常放在不拥有外键的一方。 使用Hibernate的注解,开发者可以更直观地理解对象与数据库的关系,并减少XML...
8.5. 使用连接表的双向关联(Bidirectional associations with join tables) 8.5.1. 一对多(one to many) /多对一( many to one) 8.5.2. 一对一(one to one) 8.5.3. 多对多(many to many) 9. 组件...
7.5. 使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂...
使用连接表的双向关联(Bidirectional associations with join tables) 8.5.1. 一对多(one to many) /多对一( many to one) 8.5.2. 一对一(one to one) 8.5.3. 多对多(many to many) 9. 组件...
7.5. 使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的...
7.5. 使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂...
7.5. 使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂...
使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的...