hibernate 关联关系 一对多 单向关联 .
2014-09-18 16:35
218 查看
一对多关系很常见,例如父亲和孩子、班级与学生的关系就是很好的一对多的关系。在实际编写程序时,一对多关系有两种实现方式:单向关联和双向关联。单向的一对多关系只需在一方进行映射配置,而双向的一对多需要在关联的双方进行映射配置。下面以Group(班级)和Student(学生)为例讲解如何配置一对多的关系。
单向的一对多关系只需在一方进行映射配置,所以我们只配置Group(班级)的映射文件Group.hbm.xml
group 表结构:
create table "CLASSICCARS"."GROUPS"(
"ID" BIGINT not null,
"NAME" VARCHAR(20),
constraint "SQL140918025642540" primary key ("ID")
);
group pojo:
public class Groups {
private Long id;
private String name;
private Set student1;
}
Group.hbm.xml:
<set>元素描述的字段对应的类型为java.util.Set,它的各个属性的含义如下:
1.name 字段名,本例的字段名为student1,它属于java.util.Set类型
2.table 关联表名,本例中student1的关联数据表名是student1.
3.lazy 是否延迟加载,lazy=false表示立即加载。
4.inverse:用于表示双向关联中的被动方的一端,inverse的值为false的一方负责维护关联关系。默认为false。本例的group将负责维护它与student之间的关联关系。
5.cascase 级联关系,cascade=all 表示所有情况下均进行级联操作,即包含save-update和delete操作。
6.sort 排序关系,其可选取的值为unsorted(不排序),natural(自然排序),comparatorClass(由某个实现了java.util.comparator接口的类型指定排序算法)。
<key>子元素的column属性指定关联表(本例中student表)的外键,<one-to-many>子元素的class属性指定了关联类的名字。
注意:字段group_id不用在student 映射文件配置,因为在group那里以经有说明,否则会报重复错误。
public static void main(String[] args) {
// TODO Auto-generated method stub
Session session=HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();
Student1 stu=new Student1();
Groups groups=(Groups) session.get(Groups.class, (long)3);
stu.setName("Linli");
stu.setSex("Femal");
stu.setAge((long)25);
session.save(groups);
tx.commit();
session.close();
}
单向的一对多关系只需在一方进行映射配置,所以我们只配置Group(班级)的映射文件Group.hbm.xml
group 表结构:
create table "CLASSICCARS"."GROUPS"(
"ID" BIGINT not null,
"NAME" VARCHAR(20),
constraint "SQL140918025642540" primary key ("ID")
);
group pojo:
public class Groups {
private Long id;
private String name;
private Set student1;
}
Group.hbm.xml:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="hibernateTest.Groups" table="GROUPS" schema="CLASSICCARS" lazy="true"> <id name="id" type="java.lang.Long" > <column name="ID" /> <generator class="increment" /> </id> <property name="name" type="java.lang.String" > <column name="NAME" length="20" not-null="true"/> </property> <set name="student1" table="student1" lazy="false" inverse="false" cascade="all" sort="unsorted"> <key column="group_id" not-null="true"></key> <one-to-many class="hibernateTest.Student1"/> </set> </class> </hibernate-mapping>
<set>元素描述的字段对应的类型为java.util.Set,它的各个属性的含义如下:
1.name 字段名,本例的字段名为student1,它属于java.util.Set类型
2.table 关联表名,本例中student1的关联数据表名是student1.
3.lazy 是否延迟加载,lazy=false表示立即加载。
4.inverse:用于表示双向关联中的被动方的一端,inverse的值为false的一方负责维护关联关系。默认为false。本例的group将负责维护它与student之间的关联关系。
5.cascase 级联关系,cascade=all 表示所有情况下均进行级联操作,即包含save-update和delete操作。
6.sort 排序关系,其可选取的值为unsorted(不排序),natural(自然排序),comparatorClass(由某个实现了java.util.comparator接口的类型指定排序算法)。
<key>子元素的column属性指定关联表(本例中student表)的外键,<one-to-many>子元素的class属性指定了关联类的名字。
<p>Student1表结构:</p><p> create table "CLASSICCARS"."STUDENT1"( "ID" BIGINT not null, "NAME" VARCHAR(20), "group_id" BIGINT, "SEX" VARCHAR(5), "AGE" BIGINT, constraint "SQL140913082545570" primary key ("ID") );group pojo:</p><p> public class Student1{</p><p> </p><p> private Long id; private String name;</p><p> private String sex; private Long age; private Long group_id; </p><p>}</p><p>Student1.hbm.xml:</p><p><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "<a target=_blank href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd</a>"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="hibernateTest.Student1" table="STUDENT1" schema="CLASSICCARS" lazy="false"> <id name="id" type="java.lang.Long"> <column name="ID" not-null="true"/> <generator class="increment" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" length="20" /> </property> <property name="sex" type="java.lang.String"> <column name="SEX" length="5" /> </property> <property name="age" type="java.lang.Long"> <column name="AGE" /> </property> </class> </hibernate-mapping> </p><p> </p>
注意:字段group_id不用在student 映射文件配置,因为在group那里以经有说明,否则会报重复错误。
public static void main(String[] args) {
// TODO Auto-generated method stub
Session session=HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();
Student1 stu=new Student1();
Groups groups=(Groups) session.get(Groups.class, (long)3);
stu.setName("Linli");
stu.setSex("Femal");
stu.setAge((long)25);
session.save(groups);
tx.commit();
session.close();
}
相关文章推荐
- Hibernate关联关系总结一对多、多对一单向关联
- Hibernate多对多单向关联(2个一对多)
- Hibernate 一对多连接表单向关联
- Hibernate中的延迟加载、实体关联单向一对多及双向一对多实体关联
- hibernate中配置非主键关联(单向一对多)
- Hibernate 一对多连接表单向关联
- Hibernate关联关系总结一对多、多对一双向关联,多对多
- hibernate 关联映射:多对一(一对多)双向关联关系
- hibernate映射关系 一对多、多对一单向关联 一对多双向关联
- Hibernate 一对多连接表单向关联
- Hibernate 一对多连接表单向关联
- Hibernate关系映射级别注解(一对多单向外键关联、一对多(多对一)双向外键关联)
- Hibernate_映射_关联关系_cascade属性、单向关联
- Hibernate关联关系映射(单向一对多、单向多对一、双向一对多)
- Hibernate 第十讲 表关联关系(三)单向项一对一主键关联
- Java的Hibernate框架中一对多的单向和双向关联映射
- Hibernate 关联关系映射 -单向关联
- Hibernate 单向多对一、单向一对多、双向一对多关联关系详解
- Hibernate初学者---一对多 /多对一 单向关联
- hibernate中配置非主键关联(单向一对多)