以前使用多对多只是用来查询,还没有真正用来插入进行中间表的管理,所以第一次使用会遇到很多的问题,感觉不知如何着手,这是一下问题的表现情况:
@Test
@Rollback(false)
public void testAddProtocol() {
AssayType assayTypeOne = assayTypeDAO.getObject(1263);
AssayType assayTypeTwo = assayTypeDAO.getObject(1264);
AssayType assayTypeThr = assayTypeDAO.getObject(1186);
/*AssayType assayTypeOne = assayTypeDAO.getObject(1190);
AssayType assayTypeTwo = assayTypeDAO.getObject(1191);
AssayType assayTypeThr = assayTypeDAO.getObject(1196);*/
Set<AssayType> assayTypes = new HashSet<AssayType>();
assayTypes.add(assayTypeOne);
assayTypes.add(assayTypeTwo);
assayTypes.add(assayTypeThr);
Protocol protocol = protocolDAO.getProtocolByName("founder One");
protocol.setAssayTypes(assayTypes);
protocolDAO.addOrModifyProtocol(protocol);
}
AssayType和Protocol是多对多的关系,你执行此函数,中间表中有三条数据,这个结果是预期想要的结果,当你将注释打开,将前三行注释,执行此函数,此时期望的结果应该是中间表有六条数据,但你得到的结果却是三天,就是它将覆盖以前插入的三条,通过同事的指点原来在插入之前续签先将它取出,正确的做法应该是:
@Test
@Rollback(false)
public void testAddProtocol() {
AssayType assayTypeOne = assayTypeDAO.getObject(1263);
AssayType assayTypeTwo = assayTypeDAO.getObject(1264);
AssayType assayTypeThr = assayTypeDAO.getObject(1186);
/*AssayType assayTypeOne = assayTypeDAO.getObject(1190);
AssayType assayTypeTwo = assayTypeDAO.getObject(1191);
AssayType assayTypeThr = assayTypeDAO.getObject(1196);*/
Set<AssayType> assayTypes = new HashSet<AssayType>();
assayTypes.add(assayTypeOne);
assayTypes.add(assayTypeTwo);
assayTypes.add(assayTypeThr);
Protocol protocol = protocolDAO.getProtocolByName("founder One");
assayTypes.addAll(protocol.getAssayTypes());
protocol.setAssayTypes(assayTypes);
protocolDAO.addOrModifyProtocol(protocol);
}
分享到:
相关推荐
在数据库层面,ManyToMany关系通过一个中间表实现,这个中间表通常包含两个外键,分别对应两个关联实体类的主键。在这个例子中,中间表名为`student_course`,包含`student_id`和`course_id`两列。 在处理...
这种关系在数据库表设计中通常通过中间表来实现,而在Hibernate中,我们使用`@ManyToMany`注解简化了这种复杂性。 标题"manytomany注解模式.rar"表明这个压缩包文件包含了关于如何在Hibernate中使用`@ManyToMany`...
- Hibernate会自动维护中间表,但需要注意的是,如果直接操作数据库删除了一个实体,那么相关的关联可能不会自动更新。因此,推荐始终通过Hibernate API来管理关联关系,避免直接操作数据库。 5. 中间表的自定义:...
2. **中间表映射**:在User类和Role类中,使用`@ManyToMany`注解来声明多对多关系。`@JoinTable`注解用于指定中间表的名称、连接的列以及外键名称。例如: ```java @Entity public class User { @Id private Long...
- `ManyToMany`关系需要一个中间表来存储双方实体的外键,Spring Data JPA会自动为我们创建这个表,但我们可以通过`@JoinTable`注解自定义它的名字、列名等。 3. **Repository接口**: - 创建继承自`Jpa...
在`User`实体中,我们使用`@ManyToMany`注解来声明多对多关联,并通过`@JoinTable`注解指定中间表`user_roles`,以及两个实体在中间表中的对应列。 2. 定义`Role`实体: ```java @Entity public class Role { ...
在JPA中,这种关系通常通过一个中间表来实现,该表包含两个外键,分别指向两个实体的主键。 首先,我们需要在两个相关的实体类中定义ManyToMany注解。假设我们有`Student`和`Course`实体,它们的定义可能如下: ``...
在这个例子中,`Student`和`Course`类分别表示学生和课程,它们通过`@ManyToMany`建立关联,并通过`@JoinTable`定义了中间表`student_course`。 ### `@OneToMany`关系 `@OneToMany`注解表示一个实体可以与另一个...
@JoinTable注解定义了中间表及其连接列,而mappedBy属性表明Course实体是关系的拥有者。 以上就是关于Hibernate对象三状态以及OneToOne、OneToMany和ManyToMany关系映射的详细讲解,希望对你理解Hibernate的工作...
如果两个 Vo 都定义了 ManyToMany,那么因为单向关系,会生成两个中间表。因此,我们需要改造成双向关系,使其只存在一个中间表。 例如,我们可以使用以下代码来定义 ManyToMany 关系: ```java @ManyToMany @Join...
在Hibernate中,我们可以通过`@ManyToMany`注解来定义这种关系,并使用`@JoinTable`注解来指定中间表的信息。例如: ```java @Entity public class Student { @Id @GeneratedValue(strategy = GenerationType....
此外,由于`@ManyToMany`默认创建了一个中间表,所以在数据库设计时,可以根据业务需求考虑是否需要自定义中间表的结构,比如添加额外的属性,如关联的创建时间等。 总之,JPA的`@ManyToMany`注解为我们处理多对多...
为了在数据库中实现这种关系,通常会创建第三个中间表来存储两个主表之间的关联。 在Spring Data JPA中,我们可以通过在实体类上定义`@ManyToMany`注解来建立多对多关联。例如,对于用户和角色的例子: ```java @...
默认情况下,Hibernate会根据`@ManyToMany`注解中的`@JoinTable`信息自动生成中间表。`joinColumns`表示当前实体在中间表中的引用,`inverseJoinColumns`则表示另一个实体的引用。在上述例子中,`student_course`表...
2. **关联映射**:在实体类中使用`@ManyToMany`注解定义多对多关系,并指定中间表和关联的属性。 3. **中间表配置**:如果需要自定义中间表,可以使用`@JoinTable`注解来指定表名、外键列名等信息。 4. **业务逻辑...
在上面的例子中,`@ManyToMany`注解表明了两个实体间的多对多关系,`mappedBy`属性用于指定反向关联的属性名,`@JoinTable`则定义了中间表的详细信息,包括表名、外键列名等。 如果选择使用XML配置文件,你需要在两...
在多对多关系中,两个实体类型(例如,学生和课程)可以通过中间表来连接。这个中间表通常包含两个外键,分别指向参与关联的实体。在Hibernate中,可以通过`@ManyToMany`注解来声明这种关系。例如: ```java @...
3. **中间表配置**:虽然大多数情况下Hibernate会自动创建中间表,但你也可以通过`@JoinTable`注解自定义中间表的细节,如表名、联合主键等。例如: ```java @ManyToMany @JoinTable(name = "student_course", ...
- 在数据库层面,Django会为ManyToManyField关系创建一个中间表,如果需要对中间表进行特殊配置,比如添加额外的字段,可以通过在ManyToManyField中使用through参数指定一个自定义的中间模型来实现。 - 当处理大量...
1、在 django 表中用到了 manytomany 生成了中间表 pyclub_article_column from django.db import models # Create your models here. class Column(models.Model): id = models.AutoField(u'序号',primary_key=...