分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

Hibernate学习笔记(3)---hibernate关联关系映射

发布时间:2023-09-06 01:13责任编辑:彭小芳关键词:Hibernate

一对一关联

假设有两个持久化类(实体类)User与Address,它们之间存在一对一的关系

1,通过主键关联(个人偏向另外一种)

User.hbm.xml文件配置
<id name="userid" type="java.lang.Integer"> ???????????<column name="userid" /> ???????????<!-- 主键关联,将主键生成策略改为foreign,表明由关联类来生成主键, ???????????即直接使用另外关联类的主键值,该实体类不能生成主键 --> ????????????<generator class="foreign" /> ????????????<para name="property">address</para><!-- ?--> ???????</id> ??????????????<property name="name" type="java.lang.String"> ???????????<column name="name" length="12" /> ???????</property> ???????<property name="password" type="java.lang.String"> ???????????<column name="password" length="16" /> ???????</property>
<one-to-one name="address" class="Address" constrained="true"></one-to-one></span>

  Addrss.hbm.xml文件配置

<id name="addressid" type="java.lang.Integer"> ?????????????<column name="addressid" /> ?????????????<generator class="identity" /> ?????????</id> ????????????????<property name="addressinfo" type="java.lang.String"> ?????????????<column name="addressinfo" length="12" /> ?????????</property>

  

2通过外键关联

两张表主键不同,通过给一张表添加外键列来保持一对一关系,所以在user 表中加入address_id
直接在原始的User配置文件加入下行代码
 <!-- class属性:另外个实体类,将其的address属性映射为address表的外键address_id, ?????????unique指定一对一映射 ??????????--> ?????????<many-to-one name="address" class="Address" unique="true"> ?????????<!-- 外键 --> ?????????????<column name="address_id"></column> ?????????</many-to-one>

  

一对多关联映射

还是上方例子为例,一个用户拥有多个地址
第一步:在一的一方表示出多(即在用户中表示多)
在User.java表示多,生成get,set方法
private Set<Address> setAddress = new HashSet<Address>(); ???????public Set<Address> getSetAddress() { ?????????return setAddress; ?????} ?????public void setSetAddress(Set<Address> setAddress) { ?????????this.setAddress = setAddress; ?????}

  第二步:在Address.java表示一

  

private User user; ?public User getUser() { ?????return user; ?} ?public void setUser(User user) { ?????this.user = user; ?} ?

  

第三步:配置Uesr.hbm.xml与Address.hbm.xml的基本映射
 
第四步:在一的配置文件(User.hbm.xml)配置多的一方
 <!--set集合名称 --> ?????<!--hibernate机制,双向维护外键 ??????columen 外键名称--> ??????<key column="user_address"></key> ??????<one-to-many class="Address全路径"/> ?</set>

  第五步:在多的配置文件(Address.hbm.xml)配置一的一方

<!--name属性 写address.java表示的user--> ?????<many-to-one name="user" class="User全路径" ?column="外键名"></many-to-one>

  

多对多的关联映射

多对多一般创建第三张中间表来维护两个表之间关系
场景:公司里面一个用户有多个角色,一个角色就多个用户
 
第一步:创建实体类对象(user  ,role)
第二步:在user.java表示role和在role.java表示user
user.java表示role
private Set<Role> setRole = new HashSet<Role>(); ?public Set<Role> getSetRole() { ?????return setRole; ?} ?public void setSetRole(Set<Role> setRole) { ?????this.setRole = setRole; ?}

  role.java表示user

private Set<User> setUser = new HashSet<User>(); ???????????public Set<User> getSetUser() { ?????????return setUser; ?????} ?????public void setSetUser(Set<User> setUser) { ?????????this.setUser = setUser; ?????}

  

第三步:配置两个类的基本映射
第四步:分别在配置文件中配置
user配置role
<!-- ??????name ?角色set集合名称 ?????table 第三张表的名称 ??????--> ?????<set name="setRole" table="t_ub"> ?????<!-- 配置当前映射文件在第三张表外键名称 --> ?????????<key column="uid"></key> ?????????<many-to-many class="路径" column="rid"></many-to-many> ?????</set> ?

  role配置user

 <!-- ??name ?角色set集合名称 ?table 第三张表的名称 ??--> ?<set name="setUser" table="t_ub"> ?<!-- 配置当前映射文件在第三张表外键名称 --> ?????<key column="bid"></key> ?????<many-to-many class="路径" column="uid"></many-to-many> ?</set> ?

  

由于t_user表与t_role没有外键关联,可以直接进行crud操作,两表的关系通过第三张表来维护(后面会写第三张表的维护)

Hibernate学习笔记(3)---hibernate关联关系映射

原文地址:http://www.cnblogs.com/durui/p/7582281.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved