【学习笔记】Hibernate中多对多不用List而用Set的原因分析

在一般情况下做关联映射的时候,很多人都喜欢用List,我就是其中一个,毕竟query.list()返回的就是list对象,因此也用习惯了

但是今天发现在多对多的时候尽量不要用List,因为用list会导致复合主键问题。



场景:Teacher和Student是两个多对多关系的类,每个类有自己的id和name,代表学生和老师,还有一个集合,代表对应的关系(废话:一个学生可以有多个老师,一个老师可以有多个学生)

实体类就不说了,如果实体类还不懂的建议先去看懂普通实体类的映射


首先用List,List的映射文件代码如下:

Student.hbm.xml【List】



	
	
		
			
		
		
		
		
		
			
			
			
				
				
	




Teacher.hbm.xml【List】



	
	
		
			
		
		
		
		
		
			
			
			
		
		
				
	

从上面的映射文件可以看出,都有list-index这个子元素,指向相同的index列,然后我们通过hibernate自动生成表的方法操作一下


现在问题出来了:

原本两个表的关系表,应该是teacherId和studentId作为联合主键的,现在是idx是其中一个联合主键,虽然两个外键还是teacherId和studentId,但是其中一个主键竟然是idx,这就是冲突了,


虽然在插入数据的过程中不会对数据造成太大的影响,但是为了保险起见,我们还是用回Set作为集合的操作


用Set来作为集合映射:

Teacher.hbm.xml【Set】



	
	
		
			
		
		
		
		
		
			
			
		
		
				
	



Student.hbm.xml【Set】



	
	
		
			
		
		
		
		
		
			
			
				
				
	


用hibernate执行生成表:





从这里可以看出,为了避免不必要的错误,多对多关系的情况下尽量使用Set


老猫也是新手,如果各位大神有任何异议或者更好的解析,小弟愿闻其详!






你可能感兴趣的:(2️⃣框架,&,工具,-,♻️,-----Hibernate,SSH日常应用)