hibernate一对多关联映射—单向
2012-08-08 16:35
387 查看
一、简述
一对多关联映射(one-to-many)
1、在对象模型中,一对多的关联关系,使用集合表示
比如Classes(班级)和Student(学生)之间是一对多的关系
public class Classes{
private String id;
private String name;
private Set students;
}
public class Student{
public String id;
public String name;
}
2、我们以前学过学生对班级是多对一,返过来,班级对学生就是一对多。
3、我们多对一的关系是用户和组。返过来看,从组这边来看,就是一对多了。
下面学生的示例是班级和学生。和用户和组是一样的。
一个班级有多个学生,这是一对多的关系;返过来,多个学生属于一个班级,这就是多对一了。
4、建立对象模型
5、这两个对象模型之间是有关系的。我们现在讲的是一对多。一的一端是班级。多的一端是学生。那么怎么样能体现出这种关系呢?
我们在学习多对一时,是在多的一端加上一个字段。这个字段做为外键关联一的一端。多对一,就是我们在看到学生的时候,能够知道这个学生是哪个班级的。或者是当我们看到用户的时候,知道这个用户是哪个组的。所以在用户里面持有组的引用。
6、那么一对多,就是一个组里面有多少个用户。所以要维护这种关系,必须在组里面持有用户的集合。
班级和学生也是一样的。一个班级有多少学生,所以在班级里面要持有相应的学生的集合。
如下图
我们用Set,通常用户Set做映射。
箭头表示两者之间是有关系的。
7、上面的是对象模型,那么这种模型要映射成什么样呢?
当我们定义多对一的关系时,在加载多的一端时,能够把1的一端加载上来。因为两者之间是有关系的。
同理,一对多也是一样的,它要维护这种关系。这种关系就是一对多。一的一端要指向多。
在维护这种关系时,在加载一的时候,就会把一的一端加载上来。
也就是说,在我在加载班级时,这个班级有多少个学生,它会把所有的学生自动查询上来,放到Set集合里面。这就是维护这个关系的目的。
8、我们知道,实体类要映射成表。所在下面画两个表。
依我们来看,是先有班级。再分配学生。
学生有了,班级有了。要保证知道一个班级有多少学生。
因为students这个集合是在Classes上,要映射它的时候,那么我们是要在t_classes表上加一个字段,然后将所有的学生用,表达式表达出来吗?可是这样做不符合数据库的设计范式。
9、所以说,这种关系的维护应该是在t_student这一端。也就是说,在t_student表中加一个字段,这个字段就是classesid。
也就是说,一对多关联映射,要把两个表的关联字段加到多的一端。
10、所以说,一对多与多对一的映射是一样的。没有区别。都在多的一端加一个外键,指向一的一端。
但是两者也是有区别的。区别就是关系。如果维护的是多对一,则加载多的时候,能把1加上来。如果维护的是一对多,则加载班级时,能把尚学堂对应的两个学生加载上来。
我的理解:对于要相关联的表来说,如果一个表想要看到对方的表内容,则就要在自己的实体类中持有对方的引用。
如果只有一方看到另一方,就是单向的。
如果要双方都看到,就要在实体模型中彼此都持有对方的引用。
二、新建项目hibernate_one2many_1(拷贝hibernate_session)这个项目就O了。:我们这个实例还是单向的。只能在加载班级时,把所有的学生加载上来。但是当把学生拿上来的时候,看不到这个学生所在的班级。
三、建立对象模型
1、注意:一对多关联映射,通常用Set这个集合,那么为什么用Set呢?我们可以这样理解:Set里面的对象是不能重复的。当然也可以用其他的。不过一般情况下用Set。
一定要用Set这个接口,而不用HashSet。因为Hibernate中有延迟加载。实体对象就实现了延迟加载。也就是采用代理的方式。集合也有延迟加载。hibernate中对JDK中的Set集合进行了扩展,也就是实现了这个接口,所以不能用HashSet。
所以要用Set接口。因为hibernate对Set有相应的实现,对Set进行了扩展。
2、我们的Set里面就是Student对象的集合。这样就构成了一对多的关系。
2.1 Classes.java
package com.bjsxt.hibernate;
import java.util.Set;
public class Classes {
private int id;
private String name;
private Set students;
public Set getStudents() {
return students;
}
public void setStudents(Set students) {
this.students = students;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.2Student.java
package com.bjsxt.hibernate;
public class Student {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
四、对象模型建立好之后,就开始写映射文件,这是hibernate开发的正确思路。
1、在写映射文件时,先从简单的写起。
写Students.hmb.xml文件。
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.bjsxt.hibernate.Student" table="t_student">
<id name="id">
<!-- 主键的生成方式不能是uuid。因为这种生成方式是生成32位16进制的字符串
而我们的实体类中id的类型为int.所以要修改主键的生成方式为native.就是以数字形式自增 -->
<generator class="native"></generator>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
2、再映射难一点的,Classes.hbm.xml文件如下 :
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.bjsxt.hibernate">
<class name="Classes" table="t_classes">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<!-- 上面为简单属性
下面要看一下集合要如何映射
答:集合要用set标签来映射
set标签的名字属性的值就是Classes类中的集合类型数据的变量名 -->
<set name="students">
<!-- 那么要如何映射set里面的东西呢?
我们知道ont2many的映射关系,与many2one的映射是一样的,要在多的一端加字段的。
但是到目前为止,在t_student这张表里面是没有classid这个字段标识的。
所以要把这个字段加过来,加过来之后,还要做为外键指向t_classes这张表的主键
我们用key标签来实现 -->
<!-- 在key标签里面要使用的属性是列,就是给定在t_student表中的加上的列的名字。
加了key这个标签后,就会把classid这个字段加入到t_student这张表里面了,
它做为外键指向t_class表的id字段。 -->
<key column="classid"></key>
<!-- 接下来,采用one-to-many这个标签,采用这个标签,一方面是一对多,
另一方面,要用class这个属性来指定Classes.java类中的students这个集合里面
到底是什么元素。我们这个实例里面是Student对象集合。
一定要指定集合中的元素是什么类型的对象。-->
<one-to-many class="Student"/>
<!--ont-to-many标签就代表了students集合里面是Student对象。
这样指明之后,classes就能找到student这张表。
因为student在这里都写了。
而且在Student.hbm.xml文件中,也已经映射Student对象映射到哪张表了。
这样就可以把classid加到表t_student里面,而且做为外键指向t_classes表的主键id. -->
</set>
</class>
</hibernate-mapping>
五、到hibernate.cfg.xml文件中,修改数据库,并把我们的两个实体类加到配置文件中
文件内容为:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory >
<!-- 数据库改成hibernate_session -->
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_one2many_1</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">true</property>
<mapping resource="com/bjsxt/hibernate/Classes.hbm.xml"/>
<mapping resource="com/bjsxt/hibernate/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
六、打MySql,创建数据库
root;
create database hibernate_one2many_1;
use hibernate_one2many_1;
show tables;
七、执行ExportDB.class类,将对象导出为表
ExportDB.class 文件内容为:
package com.bjsxt.hibernate;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
//这个类写完之后,以后就再也不用写了。
//这个类就是把hibernate的配置文件,转换成DDL。
public class ExportDB {
public static void main(String[] args){
//读取hibernate.cfg.xml文件
Configuration cfg=new Configuration().configure(); //hibernate中的一个api,是Configuraton。引入时,将光标定位在Configuration上
//右击,选择"Source"命令的"Add Import"命令,找到hibernate的Configuration。
//它是用来读取hibernate中的配置文件的。即hibernate.cfg.xml文件。(相当于Struts中的
//ActionServlet)
//这样直接写 Configuration cfg=new Configuration();会有问题,因为
//hibernate有两个配置文件,一个是property类型的,一个是xml类型的,这样
//new完,就会默认的读取property类型的配置文件,这样就会有问题。所以必须加上它的一个
//方法configure()。
//hibernate中有一个工具类,叫SchemaExport,这个工具类需要传送configuration.
//这个对象就把我们的类生成(导成)表出来。
SchemaExport export=new SchemaExport(cfg);
export.create(true, true); //script是判断生成不生成,它实际是生成ddl.
//这两个参数都设置成true就可以了。
//这个方法的具体含义可以直接看它的api。
//或者关联上它的源代码,可以在create上,点击F3,
//选择"Attach Resource",选择“External File",
//再找到F:\java program\Hibernate相关资料\hibernate-3.2.0.ga,就关联上了。
//export.create(..)是拿到对象,直接生成就可以了。
}
}
八、导出表后,在控制台显示:
drop table if exists t_classes
drop table if exists t_student
create table t_classes (id integer not null auto_increment, name varchar(255), primary key (id))
create table t_student (id integer not null auto_increment, name varchar(255), classid integer, primary key (id))
注意:在student表中加的字段classid是在写Classes.hbm.xml映射文件时,key标签起的作用哦!
alter table t_student add index FK4B907570C229DCC9 (classid), add constraint FK4B907570C229DCC9 foreign key (classid) references t_classes (id)
这条语句是在t_student这张表中加了约束。也就是classid作为外键参照了t_classes的id字段。
2、到MysQL中
输入show tables;
desc t_classes;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
输入命令:
desc t_student;
显示结果为:我们发现在t_student这张表中加了一个字段classid。
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| classid | int(11) | YES | MUL | NULL | |
+---------+--------------+------+-----+---------+----------------+
九、所以我们项目上用hibernate进行持久层映射时,最重要的是要发现对象,然后建立对象之间的关系
十、readme.xml文件内容为:
hibernate 一对多关联映射。(单向日葵 Classed----->Student)
一对多关联映射利用了多对一关联映射原理。
多对一关联映射,在多的一端加入一个外键,指向一的一端。但是它维护的关系是多指向一的。
一对多关联映射,在多的一端加入一个外键,指向一的一端。但是它维护的关系是一指向多的。
也就是说,一对多与多对一映射策略是一样的,只不过站的角度不同。
一对多关联映射(one-to-many)
1、在对象模型中,一对多的关联关系,使用集合表示
比如Classes(班级)和Student(学生)之间是一对多的关系
public class Classes{
private String id;
private String name;
private Set students;
}
public class Student{
public String id;
public String name;
}
2、我们以前学过学生对班级是多对一,返过来,班级对学生就是一对多。
3、我们多对一的关系是用户和组。返过来看,从组这边来看,就是一对多了。
下面学生的示例是班级和学生。和用户和组是一样的。
一个班级有多个学生,这是一对多的关系;返过来,多个学生属于一个班级,这就是多对一了。
4、建立对象模型
5、这两个对象模型之间是有关系的。我们现在讲的是一对多。一的一端是班级。多的一端是学生。那么怎么样能体现出这种关系呢?
我们在学习多对一时,是在多的一端加上一个字段。这个字段做为外键关联一的一端。多对一,就是我们在看到学生的时候,能够知道这个学生是哪个班级的。或者是当我们看到用户的时候,知道这个用户是哪个组的。所以在用户里面持有组的引用。
6、那么一对多,就是一个组里面有多少个用户。所以要维护这种关系,必须在组里面持有用户的集合。
班级和学生也是一样的。一个班级有多少学生,所以在班级里面要持有相应的学生的集合。
如下图
我们用Set,通常用户Set做映射。
箭头表示两者之间是有关系的。
7、上面的是对象模型,那么这种模型要映射成什么样呢?
当我们定义多对一的关系时,在加载多的一端时,能够把1的一端加载上来。因为两者之间是有关系的。
同理,一对多也是一样的,它要维护这种关系。这种关系就是一对多。一的一端要指向多。
在维护这种关系时,在加载一的时候,就会把一的一端加载上来。
也就是说,在我在加载班级时,这个班级有多少个学生,它会把所有的学生自动查询上来,放到Set集合里面。这就是维护这个关系的目的。
8、我们知道,实体类要映射成表。所在下面画两个表。
依我们来看,是先有班级。再分配学生。
学生有了,班级有了。要保证知道一个班级有多少学生。
因为students这个集合是在Classes上,要映射它的时候,那么我们是要在t_classes表上加一个字段,然后将所有的学生用,表达式表达出来吗?可是这样做不符合数据库的设计范式。
9、所以说,这种关系的维护应该是在t_student这一端。也就是说,在t_student表中加一个字段,这个字段就是classesid。
也就是说,一对多关联映射,要把两个表的关联字段加到多的一端。
10、所以说,一对多与多对一的映射是一样的。没有区别。都在多的一端加一个外键,指向一的一端。
但是两者也是有区别的。区别就是关系。如果维护的是多对一,则加载多的时候,能把1加上来。如果维护的是一对多,则加载班级时,能把尚学堂对应的两个学生加载上来。
我的理解:对于要相关联的表来说,如果一个表想要看到对方的表内容,则就要在自己的实体类中持有对方的引用。
如果只有一方看到另一方,就是单向的。
如果要双方都看到,就要在实体模型中彼此都持有对方的引用。
二、新建项目hibernate_one2many_1(拷贝hibernate_session)这个项目就O了。:我们这个实例还是单向的。只能在加载班级时,把所有的学生加载上来。但是当把学生拿上来的时候,看不到这个学生所在的班级。
三、建立对象模型
1、注意:一对多关联映射,通常用Set这个集合,那么为什么用Set呢?我们可以这样理解:Set里面的对象是不能重复的。当然也可以用其他的。不过一般情况下用Set。
一定要用Set这个接口,而不用HashSet。因为Hibernate中有延迟加载。实体对象就实现了延迟加载。也就是采用代理的方式。集合也有延迟加载。hibernate中对JDK中的Set集合进行了扩展,也就是实现了这个接口,所以不能用HashSet。
所以要用Set接口。因为hibernate对Set有相应的实现,对Set进行了扩展。
2、我们的Set里面就是Student对象的集合。这样就构成了一对多的关系。
2.1 Classes.java
package com.bjsxt.hibernate;
import java.util.Set;
public class Classes {
private int id;
private String name;
private Set students;
public Set getStudents() {
return students;
}
public void setStudents(Set students) {
this.students = students;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.2Student.java
package com.bjsxt.hibernate;
public class Student {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
四、对象模型建立好之后,就开始写映射文件,这是hibernate开发的正确思路。
1、在写映射文件时,先从简单的写起。
写Students.hmb.xml文件。
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.bjsxt.hibernate.Student" table="t_student">
<id name="id">
<!-- 主键的生成方式不能是uuid。因为这种生成方式是生成32位16进制的字符串
而我们的实体类中id的类型为int.所以要修改主键的生成方式为native.就是以数字形式自增 -->
<generator class="native"></generator>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
2、再映射难一点的,Classes.hbm.xml文件如下 :
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.bjsxt.hibernate">
<class name="Classes" table="t_classes">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<!-- 上面为简单属性
下面要看一下集合要如何映射
答:集合要用set标签来映射
set标签的名字属性的值就是Classes类中的集合类型数据的变量名 -->
<set name="students">
<!-- 那么要如何映射set里面的东西呢?
我们知道ont2many的映射关系,与many2one的映射是一样的,要在多的一端加字段的。
但是到目前为止,在t_student这张表里面是没有classid这个字段标识的。
所以要把这个字段加过来,加过来之后,还要做为外键指向t_classes这张表的主键
我们用key标签来实现 -->
<!-- 在key标签里面要使用的属性是列,就是给定在t_student表中的加上的列的名字。
加了key这个标签后,就会把classid这个字段加入到t_student这张表里面了,
它做为外键指向t_class表的id字段。 -->
<key column="classid"></key>
<!-- 接下来,采用one-to-many这个标签,采用这个标签,一方面是一对多,
另一方面,要用class这个属性来指定Classes.java类中的students这个集合里面
到底是什么元素。我们这个实例里面是Student对象集合。
一定要指定集合中的元素是什么类型的对象。-->
<one-to-many class="Student"/>
<!--ont-to-many标签就代表了students集合里面是Student对象。
这样指明之后,classes就能找到student这张表。
因为student在这里都写了。
而且在Student.hbm.xml文件中,也已经映射Student对象映射到哪张表了。
这样就可以把classid加到表t_student里面,而且做为外键指向t_classes表的主键id. -->
</set>
</class>
</hibernate-mapping>
五、到hibernate.cfg.xml文件中,修改数据库,并把我们的两个实体类加到配置文件中
文件内容为:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory >
<!-- 数据库改成hibernate_session -->
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_one2many_1</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">true</property>
<mapping resource="com/bjsxt/hibernate/Classes.hbm.xml"/>
<mapping resource="com/bjsxt/hibernate/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
六、打MySql,创建数据库
root;
create database hibernate_one2many_1;
use hibernate_one2many_1;
show tables;
七、执行ExportDB.class类,将对象导出为表
ExportDB.class 文件内容为:
package com.bjsxt.hibernate;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
//这个类写完之后,以后就再也不用写了。
//这个类就是把hibernate的配置文件,转换成DDL。
public class ExportDB {
public static void main(String[] args){
//读取hibernate.cfg.xml文件
Configuration cfg=new Configuration().configure(); //hibernate中的一个api,是Configuraton。引入时,将光标定位在Configuration上
//右击,选择"Source"命令的"Add Import"命令,找到hibernate的Configuration。
//它是用来读取hibernate中的配置文件的。即hibernate.cfg.xml文件。(相当于Struts中的
//ActionServlet)
//这样直接写 Configuration cfg=new Configuration();会有问题,因为
//hibernate有两个配置文件,一个是property类型的,一个是xml类型的,这样
//new完,就会默认的读取property类型的配置文件,这样就会有问题。所以必须加上它的一个
//方法configure()。
//hibernate中有一个工具类,叫SchemaExport,这个工具类需要传送configuration.
//这个对象就把我们的类生成(导成)表出来。
SchemaExport export=new SchemaExport(cfg);
export.create(true, true); //script是判断生成不生成,它实际是生成ddl.
//这两个参数都设置成true就可以了。
//这个方法的具体含义可以直接看它的api。
//或者关联上它的源代码,可以在create上,点击F3,
//选择"Attach Resource",选择“External File",
//再找到F:\java program\Hibernate相关资料\hibernate-3.2.0.ga,就关联上了。
//export.create(..)是拿到对象,直接生成就可以了。
}
}
八、导出表后,在控制台显示:
drop table if exists t_classes
drop table if exists t_student
create table t_classes (id integer not null auto_increment, name varchar(255), primary key (id))
create table t_student (id integer not null auto_increment, name varchar(255), classid integer, primary key (id))
注意:在student表中加的字段classid是在写Classes.hbm.xml映射文件时,key标签起的作用哦!
alter table t_student add index FK4B907570C229DCC9 (classid), add constraint FK4B907570C229DCC9 foreign key (classid) references t_classes (id)
这条语句是在t_student这张表中加了约束。也就是classid作为外键参照了t_classes的id字段。
2、到MysQL中
输入show tables;
desc t_classes;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
输入命令:
desc t_student;
显示结果为:我们发现在t_student这张表中加了一个字段classid。
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| classid | int(11) | YES | MUL | NULL | |
+---------+--------------+------+-----+---------+----------------+
九、所以我们项目上用hibernate进行持久层映射时,最重要的是要发现对象,然后建立对象之间的关系
十、readme.xml文件内容为:
hibernate 一对多关联映射。(单向日葵 Classed----->Student)
一对多关联映射利用了多对一关联映射原理。
多对一关联映射,在多的一端加入一个外键,指向一的一端。但是它维护的关系是多指向一的。
一对多关联映射,在多的一端加入一个外键,指向一的一端。但是它维护的关系是一指向多的。
也就是说,一对多与多对一映射策略是一样的,只不过站的角度不同。
相关文章推荐
- Hibernate映射—— 多对一单向关联映射
- Hibernate一对多单向关联和双向关联映射方法及其优缺点
- Hibernate的关联映射(2)-单向1-1关联
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
- 【Hibernate步步为营】--单向关联一对一映射
- Hibernate之对象关系映射01一对一单向关联
- Hibernate几种关系映射总结(单向关联)
- Hibernate教程04_关系映射之一对一单向外键关联
- hibernate关联映射-单向
- hibernate多对多关联映射(单向User--->Role)
- Hibernate关联映射之多对一单向关联映射
- Hibernate_映射_关联关系_cascade属性、单向关联
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate的关联映射(4)-单向N-N关联
- Hibernate 映射关系 ---One2Many单向关联
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
- Hibernate之对象关系映射03一对一单向外键关联
- Hibernate一对一主键关联映射(单向)