实体关系映射

 
实体关系映射
1、One to one:一对一主键关联
两个表主键对应,插入一个表另一个表的主键相对应。
(1).主表:
<1>.使用Hibernate插入主键uuid.hex
<2>.修改主表user.hbn.xml
<one-to-one name="rose" class="db.Rose" cascade="all">
</one-to-one>
Name:从表名
Class:从表对应的类文件
Cascade:控制及连操作
<3>.在类文件中添加字段-对方的对象,并生成get、set方法
(2).从表:
<1>.使用按主表插入的主键来插入主键foreign
<2>.修改从表rose.hbn.xml
<one-to-one name="user" class="db.User" constrained="true"> </one-to-one>
Name:主表名
Class:主表对应的类文件
Constrained:是否要在表之间建立级联更新,它代表级联的顺序
<3>.在类文件中添加字段-对方的对象,并生成get、set方法
(3).测试类:
Rose rose = new Rose();
       rose.setName("Student");
       User user = new User();
       user.setName("zhou");
       rose.setUser(user);
       user.setRose(rose);
       Session session = HibernateSessionFactory.getSession();
       Transaction tran = session.beginTransaction();
//     session.save(user);保存哪一个都没事,两个表都会相应的变化
       session.save(rose);
       tran.commit();
       session.close();
2、One to one和One to many:唯一外键关联
(1).主表:
<1>.使用Hibernate插入主键uuid.hex
<2>.修改主表user.hbn.xml
<one-to-one name="rose" class="db.Rose" property-ref="user" cascade="all">
</one-to-one>
Name:从表名
Class:从表对应的类文件
Property-ref:主键的表名
Cascade:控制及连接操作
<3>.在类文件中添加字段-对方的对象,并生成get、set方法
(2).从表:
<1>.使用Hibernate插入主键uuid.hex
<2>.修改从表rose.hbn.xml
<many-to-one name="user" class="db.User" column="name" unique="true" >
</many-to-one>
Name:主表名
Class:主表对应的类文件
Column:外键字段
Unique:级联操作
<3>.在类文件中添加字段-对方的对象,并生成get、set方法
(3).测试类:
User user = new User();
       user.setName("zhou");
       Rose rose = new Rose();
       user.setRose(rose);
       rose.setUser(user);
       Session session=HibernateSessionFactory.getSession();
       Transaction tran=session.beginTransaction();
       session.save(user);//保存主表
       tran.commit();
       session.close();
3、One to many
Sql语句先执行插入在执行修改所以效率低,不如换用Many to one,但是不用配置从表
(1).主表:
<1>.使用Hibernate插入主键uuid.hex
<2>.修改主表user.hbn.xml
<set name="roses" cascade="all" table="rose">
             <key column="userId"></key>
            <one-to-many class="db.Rose"/>
 </set>
Name:实现了HashSet的对象名
Cascade:控制及连操作
Table:从表明
Column:外键字段
Class:从表对应的类文件
<3>.在类文件中添加字段-HashSet,并生成get、set方法
如:private Set roses = new HashSet();
(2).测试类:
Rose rose1 = new Rose();
       rose1.setName("Student");
       Rose rose2 = new Rose();
       rose2.setName("Teacher");
       User user = new User();
       user.setName("zhou");
       user.getRoses().add(rose1);
       user.getRoses().add(rose2);
       Session session = HibernateSessionFactory.getSession();
       Transaction tran = session.beginTransaction();
       session.save(user);
       tran.commit();
       session.close();
4、Many to one
Sql语句直接执行,比Many to one效率几乎高一倍,但是必须配置从表
(1).主表:
<1>.使用Hibernate插入主键uuid.hex
<2>.修改主表user.hbn.xml
<set name="roses" cascade="all" table="rose" inverse="true">
            <key column="userid"></key>
            <one-to-many class="db.Rose"/>
</set>
Name:实现了HashSet的对象名
Cascade:控制及连操作
Table:从表明
Inverse是“反转”的意思,表示关联关系的控制权
Column:外键调用的字段
Class:从表对应的类文件
<3>.在类文件中添加字段-HashSet,并生成get、set方法
如:private Set roses = new HashSet();
 (2).从表:
<1>.使用Hibernate插入主键uuid.hex
<2>.修改从表rose.hbn.xml
<many-to-one name="user" class="db.User" column="userid">
</many-to-one>
Name:主表名
Class:主表对应的类文件
Column:调用主键的字段
<3>.在类文件中添加字段-对方的对象,并生成get、set方法
(3).测试类:
Rose rose1 = new Rose();
       rose1.setName("Student");
       Rose rose2 = new Rose();
       rose2.setName("Teacher");
       User user = new User();
       user.setName("zhou");
       user.getRoses().add(rose1);
       user.getRoses().add(rose2);
       rose1.setUser(user);
       rose2.setUser(user);
       Session session = HibernateSessionFactory.getSession();
       Transaction trans = session.beginTransaction();
       session.save(user);
       trans.commit();
       session.close();
5、Many to many:一对一主键关联
两个表主键对应,插入一个表另一个表的主键相对应。
(1).主表:
<1>.使用Hibernate插入主键uuid.hex
<2>.修改主表user.hbn.xml
<set name="tgroupRoles" table="tgroup_role" inverse="true">
                 <key>
                      <column name="role_id" not-null="true" />
                 </key>
                 <many-to-many class="db.user" column=" id"/>
    </set>
Name:实现了HashSet的对象名,指的是中间表的集合
Table:中间表名
Inverse:反转
Name:中间表的字段,是中间表的主键但是是主表的主键的一个外键
Class:主表
Column:主表的主键
<3>.在类文件中添加字段-HashSet,并生成get、set方法
如:private Set tgroupRoles = new HashSet();(中间表的集合)
 (2).从表:
<1>.使用Hibernate插入主键uuid.hex
<2>.修改从表rose.hbn.xml
<set name="tgroupRoles" table="tgroup_role" cascade="save-update">
            <key>
                <column name="group_id" not-null="true" />
            </key>
            <many-to-many class="db.rose" column="id"/>
</set>
Name:实现了HashSet的对象名,指的是中间表的集合
Table:中间表名
Cascade:什么操作执行级联更新
Name:中间表的字段,是中间表的主键但是是主表的主键的一个外键
Class:主表
Column:主表的主键
<3>.在类文件中添加字段-HashSet,并生成get、set方法
如:private Set tgroupRoles = new HashSet();(中间表的集合)
(3).测试类:
Trole role1 = new Trole();
       role1.setName("Role1");
       Trole role2 = new Trole();
       role2.setName("Role2");
       Trole role3 = new Trole();
       role3.setName("Role3");
       Tgroup group1 = new Tgroup();
       group1.setName("group1");
       Tgroup group2 = new Tgroup();
       group2.setName("group2");
       Tgroup group3 = new Tgroup();
       group3.setName("group3");
       group1.getTgroupRoles().add(role1);
       group1.getTgroupRoles().add(role2);
       group2.getTgroupRoles().add(role2);
       group2.getTgroupRoles().add(role3);
       group3.getTgroupRoles().add(role1);
       group3.getTgroupRoles().add(role3);
       role1.getTgroupRoles().add(group1);
       role1.getTgroupRoles().add(group3);
       role2.getTgroupRoles().add(group1);
       role2.getTgroupRoles().add(group2);
       role3.getTgroupRoles().add(group2);
       role3.getTgroupRoles().add(group3);
       Session session = HibernateSessionFactory.getSession();
       Transaction trans = session.beginTransaction();
       session.save(role1);
       session.save(role2);
       session.save(role3);
       session.save(group1);
       session.save(group2);
       session.save(group3);
       trans.commit();
       session.close();
注释:
1inverse属性,inverse反转的意思,表示关联关系的控制权。
true,表示由对方负责关联关系的添加和删除;
false,表示由自己负责维护关联关系。
2cascade属性
all : 对所有操作都进行级联
none : 对所有操作都不进行级联
save-update : 执行更新操作时级联
delete : 执行删除操作时级联
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值