已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
说明:本文对hibernate的一对多、多对一、多对多的关联示例代码是Order类和OrderItem类的一对多的关系1. 一对多1.1注解方式:OneToMany 代码示例如下:双向关联,维护端在“多”的一端Public classOrderimplementsSerializable Private Set orderItems=newHashSet();OneToMany(mappedBy=order(有了mappedby不能也不该在此再定义joincolumn),cascade = CascadeType.ALL, fetch = FetchType.LAZY)OrderBy(value=id ASC)publicSet getOrderItems() return orderItems; 单向关联,维护端在此端Public classOrderimplements Serializable privateSet orderItems=newHashSet();OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)JoinColumn(name=”order_id”)OrderBy(value=id ASC)publicSet getOrderItems() return orderItems; 1.2维护端和级联问题维护端的意思是对外键进行维护,维护端有对外键进行插入和更新的权利。下面分情况介绍hibernate的级联操作:1.2.1单向关联对“一”表进行插入一条记录的操作:1) 级联类型:CascadeType.ALL执行语句: 1.insert into category (description, name, id) values(?, ?, ?)如果在关联表中没有该记录,执行 2.insert into product (descripton, name, price, id) values (?, ?, ?, ?)3.update product set category_id=? Where id=?同时对外键值进行了写入。2) 关联类型:CascadeType.PERSIST/MERGE执行语句:1.Insert into category (description, name, id) values(?, ?, ?)如果关联表中数据有更新,执行:2. update product set category_id=? Where id=?如果关联表中没有记录,则会报错。1.2.2双向关联(维护端在“多”端)对“一”表进行插入一条记录的操作:1) 级联类型:CascadeType.ALL执行语句: 1. insert into category (description, name, id) values(?, ?, ?)如果关联表总没有该记录,执行2.insert into product(category_id, descripton, name, price, id) values(?, ?, ?, ?, ?)注意:关联表中的外键值为空,及外键由维护端进行维护。2) 关联类型:CascadeType.PERSIST/MERGE执行语句: insert into category (description, name, id) values (?, ?, ?)2. 多对一2.1注解方式:ManyToOne(cascade=CascadeType.REFRESH,optional=false)JoinColumn(name =order_id)例如:Public classOrderItem implementsSerializable privateOrder order;ManyToOne (cascade=CascadeType.REFRESH,optional=false)JoinColumn(name =order_id)publicOrder getOrder() return order; 2.2维护端的级联问题“多端”维护外键,及对外键有更新插入的权利。在面是在多端执行插入记录所执行的SQL语句。2.2.1单向关联1)在“多”端插入一条记录,级联类型为CascadeType.ALL,执行的SQL语句为:A.当关联方记录存在:insert into product(category_id, descripton, name, price, id) values (?, ?, ?, ?, ?)如果“一”端有更新则执行:Update category set description=?,name=? Where id=?B.当关联方记录不存在:insert into category (description, name, id)values (?, ?, ?)insert into product(category_id, descripton, name, price, id) values(?, ?, ?, ?, ?)2)在“多”端插入一条记录,级联类型为CascadeType.PERSIST/MERGE/,执行SQL语句为:A.一端记录存在:insert into product(category_id, descripton, name, price, id) values (?, ?, ?, ?, ?)如果有更新则执行:Update category set description=?,name=? where id=?注意:更新“一”端主键会报错B.一端记录不存在:运行报错2.2.2双向关联(多端为维护端)1)在“多”端插入一条记录,级联类型为CascadeType.ALL/PERSIST/MERGE,执行SQL语句为:A关联端存在记录:insert into product (category_id, descripton, name, price, id) values (?, ?, ?, ?, ?)如果“一”端的数据有更新Update category set description=?,name=? where id=?注意:更改“一”端主键会报错B关联端不存在记录:运行报错推荐博客:/liangoo7/article/details/8070211注意:在做关联的时候:单向关联无需维护端,双向关联则需要多的一端维护。一对多:多对一:ManyToOne(cascade=CascadeType.REFRESH,optional=false)JoinColumn(name =order_id)例如:Public classOrderItem implementsSerializable privateOrderorder;。ManyToOne(cascade=CascadeType.REFRESH,optional=false)JoinColumn(name =order_id)publicOrder getOrder() returnorder; 多对多:/* * ManyToMany 注释表示Teacher 是多对多关系的一端。 * JoinTable 描述了多对多关系的数据表关系,name属性指定中间表名称。 * joinColumns 定义中间表与Teacher 表的外键关系,中间表Teacher_Student的Teacher_ID 列是Teacher 表的主键列对应的外键列。 * inverseJoinColumns 属性定义了中间表与另外一端(Student)的外键关系。 */ ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY) JoinTable(name = Teacher_Student, joinColumns =JoinColumn(name = teacher_ID, referencedColumnName = teacherid) , inverseJoinColumns = JoinColumn(name = student_ID, referencedColumnName = studentid) ) public Set getStudents() return students; 相关属性:fatch可选择项包括:FetchType.EAGER和FetchType.LAZY。前者表示关系类(本例是OrderItem 类)在主类(本例是Order类)加载的时候同时加载,后者表示关系类在被访问时才加载。Cascade四个值:的值只能从CascadeType.PERSIST(级联新建)、CascadeType.REMOVE(级联删除)、CascadeType.REFRESH(级联刷新)、CascadeType.MERGE(级联更新)中选择一个或多个。还有一个选择是使用CascadeType.ALL,表示选择全部四项。ManyToMany(book为维护端、category为被维护端)1) 被维护端1.1被维护端插入一条记录,级联类型:CascadeType.ALL,执行语句:Hibernate: insert into category (description, name, id) values (?, ?, ?)Hibernate: insert into book (author, price, id) values (?, ?, ?)1.2被维护端插入一条记录,级联类型:CascadeType.PERSIST/MERGE,执行语句:Hibernate: insert into category (description, name, id) values (?, ?, ?)2)2.1.维护端插入一条语句,级联类型:CascadeTye.ALL,执行语句:Hibernate: insert into book (author, price, id) values (?, ?, ?)如果被维护端没有数据则执行以下数据。Hibernate: insert into category (description, name, id) values (?, ?, ?)Hibernate: insert into book_category (bookId, categoryId) values (?, ?)2.2维护端
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设备合同采购合同范本
- 物业公司用人合同范本
- 2025年考研医学专业专项训练试卷(含答案)
- 2025年高中一年级历史下学期中外关系测试卷
- 网签委托发布合同范本
- 行纪合同代理合同范本
- 铺面低价求租合同范本
- 货物吊装运输合同范本
- 福州财务咨询合同范本
- 订购全屋灯具合同范本
- 2025全国医疗应急能力培训系列课程参考答案
- 江西体彩中心笔试题库及答案
- 网络安全技术课件下载
- 初中英语试卷讲评及课堂教学设计
- 上海安保考试题目及答案
- 糖尿病专家培训课件
- 2025-2026学年深圳市罗湖区九年级(上)英语第一学期期中联考试卷(解析版)
- 雨课堂在线学堂《中国传统文化》课后单元测试答案
- 2025年大学《社会工作-社会福利思想》考试参考题库及答案解析
- 独孤一箭实盘交割单 独股一箭20w实盘交割单
- 知道智慧树国际金融(吉林大学)满分测试答案
评论
0/150
提交评论