初学ssh框架,水平有限,下面只是本人对hibernate的关系映射的一些理解,仅当自己学习时的笔记,如有错误地方请包含和指出。文章参考的知识主要从马士兵老师的视频和自己看书得出的一些结论。
关系映射这里指的是对象与对象之间的关系,不是指的数据库之间的关系。其中分为一对一,一对多,多对一,多对多。其中都分为单向和双向。而其中又包括主键和外键映射。这里主要以多对一为例子。
多对一:这里以student和score两个对象来举例子,一个学生对应着多个分数,所以学生是一,分数为多的那一方。当我们使用单向多对一的外键关联的时候,即score-->student,这是我们要做的就是先从score这个类里面引入student这个类,如果使用annotation来实现关系映射的话,就只要在student的get方法上面写上@ManyToOne(cascade={CascadeType.ALL}),@JoinColumn(name="student_id"),
这时cascade指的是级联的类别,就是当所有的增删改起作用,而fetch则是对查起作用。后面的joincolumn则是对数据库里面生成的表的特定的字段号进行重命名。这样的话就建立的映射。
student-->score(一对多)就是相应的修改一下就好了
当是双向关联的时候,我们是在student中先引入score这个对象,然后再score的get方法上写上@OneToMany(mappedBy="score1",fetch=FetchType.EAGER),这里要写的是mappedBy,
指的是student类中的那个score的实例化的score1。如果是双向的话就把前面的两个部分组合到一起就行了。
@ManyToOne
@JoinColumn(name="student_id")
@OneToMany(mappedBy="score1")
一对多和多对一在数据库中生成的表的类型都是在score表中生成一个student_id的字段作为score表的外键,来参考student表的主键。