首先对于Annotation中CRUD的C(Create)操作:------------------------

假设 :   User (MonyToOne)       Group

OK,那么有如下 Junit Code:

  1. Configuration cfg = new AnnotationConfiguration();
  2. SessionFactory sf = cfg.configure().buildSessionFactory();
  3. Session ss = sf.getCurrentSession();
  4. Group group = new Group();
  5. group.setName("Group1");
  6. User user = new User();
  7. user.setName("User_Himi");//备注1(在内存中建议关系)
  8. user.setGroup(group);
  9. ss.beginTransaction();
  10. //ss.save(group);//备注2
  11. ss.save(user);
  12. ss.getTransaction().commit();
  13. sf.close();

备注1:如果想让两个在数据库中建立关联,那么在内存中就需要让其设置关联。

备注2:如果这里备注2行代码注视掉,是会报错的。因为Hibernate默认情况不会自动保存关联变量到数据库中,不论是CRUD的任何操作,都默认不自动存储(不会产生集联)。

那么如果需要设置自动操作关联对象的话,可以使用cascade例如当前在@ManyToOne中设置:

?
1
2
3
@ManyToOne(cascade={
            CascadeType.ALL
    })

这里cascade中需要一个数组的参数,参数均为CascadeType,其中CascadeType的类型有如下几种:

  1. CascadeType.ALL,//所有操作
  2. CascadeType.MERGE,//合并
  3. CascadeType.PERSIST,//保存
  4. CascadeType.REFRESH,//刷新
  5. CascadeType.REMOVE  //删除

总结:默认情况下有关联的对象,不论任何形式的关系映射,不论单向还是双向,在Session进行持久化时都互不影响也不自动建立集联;如果需要自动建立集联关系到数据库中,那么在关系映射的注解上设置cascade!

另外一点:双向关系在程序中要设定双向的内存关联关系,并且双向需要设置mappedBy!

要注意!使用CascadeType.ALL之外的类型,必须使用对应的函数方法才行!

    对于Annotation中CRUD的R(read)操作:------------------------

1. 在CUD操作时cascade才会有集联影响,但是杜宇R读取时使用fetch!

2.默认情况下在读取ManyToOne 取出任何一个Many中的对象,那么对应的One会默认取出来;

默认情况下 在读取OneToMany时取出One的时,默认Many不会取出来;

如果需要手动设置可以使用fetch;

fetch有两个值:

1). EAGER  (立刻的)

2). LAZY  (懒惰d的)

如果你想在OneToMany时取出One的时候立刻取出所有其他many的,可以设置如下:

@OneToMany(fetch=FetchType.EAGER)  这样就会取出One的时候取出所有的Many对象

备注:当你OneToMany使用EAGER的时候,可以在sessionFactory关闭后仍然可以取Many中的任意一个元素,但是如果ManyToOne并使用LAZY的时候你在sessionFactory关闭后不可以取出One,因为是LAZY默认不会帮你取出One!

注意:1)两方不要同事设置Eager(会有多余的查询语句发出)

2) 对多方设fetch时要注意:一般用Lazy ;

对于Annotation中CRUD的U(update)操作:------------------------

简单;update不多说;

对于Annotation中CRUD的D(delete)操作:------------------------

默认delete的时候,例如:ManyToOne,那么删除many中的一个元素时,那么Hibernate会首先删除对应的元素,然后继续删除对应关联的One,那么发现表中(Many)还有其他的元素,会先删除所有其他的Many元素,最后删除One;

解决方案:

1)使用其他的cascade,不直接使用ALL类型;

2)打破关联关系。利用致null,将关联的One可以set为null,再删除对应记录即可;

3)使用HQL语句删除

.......................................集合映射.................................

一般使用如下集合:

Set(HashSet) 一般情况下使用;

List (ArrayList) 一般需要排序的时候使用;

排序可以使用注解:@OrderBy("name ASC")

Map (HashMap)    需要注视  @MapKey(name="id")

.......................................继承映射.................................

继承映射有三种形式:

1)使用一张表的形式  : SINGLE_TABLE

2) 没各类分别一张表 TABLE_PER_CLASS

3) 每个子类一张表  JOINED

本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/969785,如需转载请自行联系原作者

【Hibernate框架开发之七】Annotation各种关系CRUD增删改查集合映射继承映射相关推荐

  1. java增删改查实例源码_Spring Data JPA 实现简单的CRUD增删改查源码案例

    Spring专题 Spring Data JPA 实现简单的CRUD增删改查源码案例 Spring Data JPA旨在简化JPA基础知识库构建和减少需要与数据库进行通信的代码量.第一部分是如何配置H ...

  2. 无需编程,基于甲骨文oracle数据库零代码生成CRUD增删改查RESTful API接口

    无需编程,基于甲骨文oracle数据库零代码生成CRUD增删改查RESTful API接口 回顾 通过之前一篇文章 无需编程,基于PostgreSQL零代码生成CRUD增删改查RESTful API接 ...

  3. 无需编程,基于微软mssql数据库零代码生成CRUD增删改查RESTful API接口

    无需编程,基于微软mssql数据库零代码生成CRUD增删改查RESTful API接口 回顾 通过之前一篇文章 无需编程,基于甲骨文oracle数据库零代码生成CRUD增删改查RESTful API接 ...

  4. 关于Qt的CRUD增删改查数据库那些事,带GUI图像界面

    关于Qt的CRUD增删改查数据库那些事,带GUI图像界面 首先感谢CSDN平台提供这样强大的分享平台. Qt Creator 的几个常用快捷键必须要会,开发事半功倍, Ctrl 简称 C C + i ...

  5. MyBatisPlus之CRUD增删改查以及分页

    MyBatisPlus之CRUD增删改查以及分页 1.CRUD详解之插入操作 环境测试,在之前的itcast-mp-springboot项目工程里面使用springboot来进行 编写用户测试类 /* ...

  6. node ajax crud,基于node.js和rethinkdb的CRUD(增删改查)Web服务

    基于node.js和rethinkdb的CRUD(增删改查)Web服务 这是一个简单的REST web服务演示案例源码,使用Node.JS和Express 和RethinkDB,后者持久化JSON数据 ...

  7. 三、CRUD(增删改查)

    三.CRUD(增删改查) 3.1.namespace ​ namespace中的包名需要和mapper接口的包名一致! 1. id:就是对应的namespace中的方法名:2. resultType: ...

  8. 【Laravel】Laravel-admin后台框架-2创建数据表建立模块增删改查CURD(2)

    前言 前面的操作我们已经能够 安装Laravel-admin 创建数据表并生成模型 修改模型实现按业务写入数据 可以参考之前的文章 [Laravel]Laravel-admin后台框架-2创建数据表建 ...

  9. Mybatis_第二节:CRUD(增删改查)

    _ ***配套文档:***↓↓↓ mybatis – MyBatis 3 | 简介 二.CRUD(增删改查) 实现功能需要改变的文件(接第一节结尾处) UserMapeer.java接口 UserMa ...

  10. hibernate 一对多 多对一 关系表 增删改查大礼包ps二级查也有

    今天来到混元气功 这货大概的意思就是你中有我 我中有你 ps 这里就要说到维护关系 ps写这个用了我一下午--.也是刚刚好复习到这里 顺便就写写 注意:一般都在多方维护关系,至于是用单向还是用多向要看 ...

最新文章

  1. 微信小程序server-1-搭建HTTPS server
  2. canvas做一个简单气泡图
  3. 成都Uber优步司机奖励政策(4月12日)
  4. linux下查看tomcat的启动日志
  5. TurboIM即时通讯正式发布
  6. 终止线程的三种方法(转)
  7. POJ NOI MATH-7655 回文数个数
  8. 大数据应用的优势在哪
  9. pat1056. Mice and Rice (25)
  10. 数字化大时代崛起的数据安全能力框架
  11. android点击特效,android 点击特效动画
  12. 自定义ViewGroup
  13. 数字营销浪潮下,企业如何打赢流量反欺诈攻防战?
  14. LAN8720A芯片
  15. VGG16 VGG19
  16. office中的OLE操作和问题
  17. ARM 相关概念及知识随笔
  18. 转载java基础总结大全(使用)
  19. 外盘国际期货招商:从股票书挑出来的精华
  20. android 12 源码编译与虚拟机调试

热门文章

  1. 【流浪地球】春节十二响程序开源代码
  2. 中断服务程序设计实验
  3. 冒泡排序,插入排序--- PYTHON
  4. es 使用ik停词_ES使用IK分词器
  5. JAVA如何选中一行上移_js操作table中tr的顺序实现上移下移一行的效果
  6. php苹果推送消息,php推送消息到IOS
  7. 蓝桥杯2017年第八届C/C++省赛C组第二题-兴趣小组
  8. 力扣-888 公平的糖果交换
  9. Android GSON解析JSON数据
  10. centos上nginx转发tcp请求