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);
	}

你可能感兴趣的:(man)