Hibernate(三)――框架中的关系映射

2014-11-24 01:00:14 · 作者: · 浏览: 1

在设计数据库时我们会考虑,表与表之间的关系,例如我们前边经常提到的一对一,一对多,多对多关系,在数据库中我们通过外键,第三张表等来实现这些关系。而Hibernate时间实体类和数据库中的表进行的映射,这些关系如何映射呢?这里简单总结一下:


一,一对多,多对一关系映射,这里拿学生和班级进行简单演示:


1,学生的类和对应的映射文件的编写:


			private int sid ;
			private String sname ;
			
			private Classes classes ; //,引入班级对象,多对一

			
  
				
    
     
   
				
   		
				
				
   
				
   
			
  


2,班级的实体类和对应的映射文件:


			private int cid ;
			private String cname ;
			
			private Set
  
    studentSet = new HashSet
   
    (); //引入学生类的集合,一对多 
   
  

			
  
				
    
     
   
				
   	
				
				
   
				
    
     
     
   
			
  

二,自关联:就是在自己的类进行关联自己,例如父菜单与子菜单的关系,对应的实体类,和映射文件


 private int mid ;			private String name ;
			
			private Set
  
    menuSet = new HashSet
   
    (); //父菜单与子菜单的关系为:一对多 private Menu pmenu ; //子菜单和父菜单的关系为:多对一 
   
  

			
  
				
    
     
   
				
   	
				
				
   
				
				
   
				
    
     
     
   
			
  

三,一对一关系映射:

1,假如是主键一对一用来映射:也就是说被动方的主键是来自于主动方的主键,也可以将之称之为外键:

类之间相互添加彼此的应用。

映射文件中主动方,增加一对一标签:

		
  

                被动方,主键又是外键,也添加一对一的映射标签:
			
  
				
    
    user 
   
			
  
			
			
  
			
  

2,使用外键约束,其实是多对一的特殊情况,例如学生对班级,

类添加彼此的应用。

映射文件中学生端主动端,添加外键进行约束,添加多对一标签,

		
  
		
  
		
                 班级端的映射文件:添加一对一的标签:
		
  

四,多对多的关系,例如学生对课程的对应,在数据库中会生成第三张表进行维护:

在各自的类中引入对方的set集合,表示多对多。

学生端:

			
  
				
   
				
   


  

课程端:

			
  
		
			
  
				
   
				
   
			
  



五,联合主键的映射,这种情况很少见,看一下如何吧,

出现了这种联合键时,需要我们为其定义一个联合主键的类(实现Serializable接口),类中声明多个字段的属性,表示联合主键字段。

在配置映射文件时,主键的配置利用联合主键的标签即可:

composite-id name="id">				
  
				
  
				

综上,为Hibernate中对数据库进行关联设置映射时的几个简单例子,主要是我们根据实际情况,掌握几个对应标签的使用,还有就是里边的属性的使用。像lazy,cascade,fetch等等。注意观察其中的不同。这样进行了关联设置我们就可以很好的,根据类生成数据库,对数据库中的数据进行关联操作,更加合理化!