`
jhyimu2005
  • 浏览: 184386 次
  • 性别: Icon_minigender_2
  • 来自: 苏州
社区版块
存档分类
最新评论

ManyToMany 中间表

 
阅读更多
以前使用多对多只是用来查询,还没有真正用来插入进行中间表的管理,所以第一次使用会遇到很多的问题,感觉不知如何着手,这是一下问题的表现情况:
@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);
	}
0
1
分享到:
评论

相关推荐

    manytomany关系

    在数据库层面,ManyToMany关系通过一个中间表实现,这个中间表通常包含两个外键,分别对应两个关联实体类的主键。在这个例子中,中间表名为`student_course`,包含`student_id`和`course_id`两列。 在处理...

    manytomany注解模式.rar

    这种关系在数据库表设计中通常通过中间表来实现,而在Hibernate中,我们使用`@ManyToMany`注解简化了这种复杂性。 标题"manytomany注解模式.rar"表明这个压缩包文件包含了关于如何在Hibernate中使用`@ManyToMany`...

    hibernate中manytomany的例子

    - Hibernate会自动维护中间表,但需要注意的是,如果直接操作数据库删除了一个实体,那么相关的关联可能不会自动更新。因此,推荐始终通过Hibernate API来管理关联关系,避免直接操作数据库。 5. 中间表的自定义:...

    hibernate 多表关联 中间表

    2. **中间表映射**:在User类和Role类中,使用`@ManyToMany`注解来声明多对多关系。`@JoinTable`注解用于指定中间表的名称、连接的列以及外键名称。例如: ```java @Entity public class User { @Id private Long...

    SpringBoot-SpringData-ManyToMany

    - `ManyToMany`关系需要一个中间表来存储双方实体的外键,Spring Data JPA会自动为我们创建这个表,但我们可以通过`@JoinTable`注解自定义它的名字、列名等。 3. **Repository接口**: - 创建继承自`Jpa...

    hibernate5_ManyToMany多对多单向维护

    在`User`实体中,我们使用`@ManyToMany`注解来声明多对多关联,并通过`@JoinTable`注解指定中间表`user_roles`,以及两个实体在中间表中的对应列。 2. 定义`Role`实体: ```java @Entity public class Role { ...

    springboot 1.5.2 jpa ManyToMany Demo

    在JPA中,这种关系通常通过一个中间表来实现,该表包含两个外键,分别指向两个实体的主键。 首先,我们需要在两个相关的实体类中定义ManyToMany注解。假设我们有`Student`和`Course`实体,它们的定义可能如下: ``...

    JPA课程manyToMany OneToMany 等全部测试

    在这个例子中,`Student`和`Course`类分别表示学生和课程,它们通过`@ManyToMany`建立关联,并通过`@JoinTable`定义了中间表`student_course`。 ### `@OneToMany`关系 `@OneToMany`注解表示一个实体可以与另一个...

    hibernate对象三状态及OneToOne&OneToMany&ManyToMany

    @JoinTable注解定义了中间表及其连接列,而mappedBy属性表明Course实体是关系的拥有者。 以上就是关于Hibernate对象三状态以及OneToOne、OneToMany和ManyToMany关系映射的详细讲解,希望对你理解Hibernate的工作...

    spring jpa ManyToMany原理及用法详解

    如果两个 Vo 都定义了 ManyToMany,那么因为单向关系,会生成两个中间表。因此,我们需要改造成双向关系,使其只存在一个中间表。 例如,我们可以使用以下代码来定义 ManyToMany 关系: ```java @ManyToMany @Join...

    Hibernate 两种方式映射many to many

    在Hibernate中,我们可以通过`@ManyToMany`注解来定义这种关系,并使用`@JoinTable`注解来指定中间表的信息。例如: ```java @Entity public class Student { @Id @GeneratedValue(strategy = GenerationType....

    JPA学习总结(四)--JPAManyToMany双向关联

    此外,由于`@ManyToMany`默认创建了一个中间表,所以在数据库设计时,可以根据业务需求考虑是否需要自定义中间表的结构,比如添加额外的属性,如关联的创建时间等。 总之,JPA的`@ManyToMany`注解为我们处理多对多...

    jpa-day3-manytomany.zip

    为了在数据库中实现这种关系,通常会创建第三个中间表来存储两个主表之间的关联。 在Spring Data JPA中,我们可以通过在实体类上定义`@ManyToMany`注解来建立多对多关联。例如,对于用户和角色的例子: ```java @...

    HIbernate-ManytoMany:HIbernate-ManytoMany 不同实体之间的关系

    默认情况下,Hibernate会根据`@ManyToMany`注解中的`@JoinTable`信息自动生成中间表。`joinColumns`表示当前实体在中间表中的引用,`inverseJoinColumns`则表示另一个实体的引用。在上述例子中,`student_course`表...

    SSH集成源代码,两表之间多对多关系插入

    2. **关联映射**:在实体类中使用`@ManyToMany`注解定义多对多关系,并指定中间表和关联的属性。 3. **中间表配置**:如果需要自定义中间表,可以使用`@JoinTable`注解来指定表名、外键列名等信息。 4. **业务逻辑...

    Hibernate多对多双向关联(annotation/xml)

    在上面的例子中,`@ManyToMany`注解表明了两个实体间的多对多关系,`mappedBy`属性用于指定反向关联的属性名,`@JoinTable`则定义了中间表的详细信息,包括表名、外键列名等。 如果选择使用XML配置文件,你需要在两...

    (5)Hibernate中的many-to-many和并发

    在多对多关系中,两个实体类型(例如,学生和课程)可以通过中间表来连接。这个中间表通常包含两个外键,分别指向参与关联的实体。在Hibernate中,可以通过`@ManyToMany`注解来声明这种关系。例如: ```java @...

    Hibernate ORM - 多对多双向连接表关联关系

    3. **中间表配置**:虽然大多数情况下Hibernate会自动创建中间表,但你也可以通过`@JoinTable`注解自定义中间表的细节,如表名、联合主键等。例如: ```java @ManyToMany @JoinTable(name = "student_course", ...

    基于django ManyToMany 使用的注意事项详解

    - 在数据库层面,Django会为ManyToManyField关系创建一个中间表,如果需要对中间表进行特殊配置,比如添加额外的字段,可以通过在ManyToManyField中使用through参数指定一个自定义的中间模型来实现。 - 当处理大量...

    Django ManyToManyField 跨越中间表查询的方法

    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=...

Global site tag (gtag.js) - Google Analytics