错误原因 在学习多对一映射处理中的级联方式处理映射关系时 , 发现自己查询的结果有一个为为null 于是就开始对代码进行排查 , debug ,最终发现错误 , 原来是自己映射中的 property
我已经删除过一次了,我记得大概3000多条,这次又来了近2000条,特点还是来自.ru后缀,也就是俄罗斯的垃圾评论群发软件搞得。...好了,打开phpMyAdmin,登录数据库,点击SQL,粘贴以下SQL,点击执行,搞定! DELETE FROM `cuiwenyuan_com`....`comment_author_email` LIKE '%.ru%' 如果还想对内容筛选并自动删除,可以使用如下SQL DELETE FROM `cuiwenyuan_com`.
来启动 10. load和get get查询时先查询一级缓存然后二级缓存然后数据数据库,直接返回实体对象,如果查询不到返回null load如果一级缓存查询不到对象会返回一个代理对象,然后等到真正使用这个对象的时候才去查询二级和数据库...但它不会级联删除 delete: 级联删除, 但不具备级联保存和更新 all-delete-orphan: 在解除父子关系时,自动删除不属于父对象的子对象, 也支持级联删除和级联保存更新. all: 级联删除..., 级联更新,但解除父子关系时不会自动删除子对象. delete-orphan:删除所有和当前对象解除关联关系的对象 15. fetch 抓取策略,在配置文件的Set标签配置 join : 左外链接...Hiberante和Mybatis的区别 Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。...而Mybatis在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以,称之为半自动ORM映射工具。
-- lazy: 关联数据查询时(多表查询) 是否使用延迟加载 :true:使用 默认值 false:不使用--> <set name="linkmans" inverse="true...保存角色<em>级联</em>保存用户. 1.3.7 <em>级联</em><em>删除</em>操作(不会用-避免去<em>使用</em>) 用的默认<em>删除</em> <em>删除</em>用户有<em>级联</em><em>时</em>,会<em>删除</em>角色....<em>删除</em>角色有<em>级联</em><em>时</em>,会<em>删除</em>用户. 1.3.8 多对多其他相关操作(掌握) 给用户选择角色 @Test /** * 给1号用户选择1号和2号角色 */...常用的值 : true : <em>使用</em>延迟加载,默认值. false : 不<em>使用</em>延迟加载. <em>查询</em>客户的同时,立马发送<em>sql</em><em>查询</em>联系人....常用的值: false : 不<em>使用</em>延迟加载(记住) <em>查询</em>联系人的时候,立马发送<em>sql</em><em>查询</em>客户. 对象导航<em>查询</em>底层用的全是延迟加载机制.
的一级缓存: 1.3.1 什么是缓存: 缓存是计算机领域经常会使用的一个概念.是介于数据源(数据库/文件)与程序之间的.就是内存中的一块空间.查询数据的时候将查询到数据放入到缓存中.当再次获得这个数据的时候...当试图get()、 load()对象时,会判断缓存中是否存在该对象,有则返回,此时不查询数据库。...级联删除也是有方向性的. * 删除客户的时候,级联删除订单....; tx.commit(); session.close(); } * 删除订单的时候,级联删除客户....孤儿删除:只能在一对多的情况下使用.认为一对多的一的一方是父方.多的一方子方. * 孤儿删除指的是删除子的一方没有外键值得那些数据.
(id)) session.load(Entity.class, id); 主键查询 (支持懒加载) 【HQL查询】 HQL、SQL查询区别: SQL: (结构化查询语句)查询的是表以及字段...,查询的是对象及对象属性;区分大小写 【Criteria查询】 完全面向对象的查询 【本地SQL查询】 复杂的查询,使用原生sql查询 (缺点: 不能跨数据库平台) 2.3 测试类...【cascade级联操作属性】 none 不级联操作, 默认值 save-update 级联保存或更新 delete 级联删除 save-update,delete...级联保存、更新、删除 all 同上。...load: 默认使用懒加载,当用到数据的时候才向数据库查询 在真正使用数据的时候才向数据库发送查询的sql;调用集合的size()/isEmpty()方法,只是统计,不真正查询数据 【解决
缓存中获取,如果有就使用;如果没有再查询数据库。...答:HQL语句查询不会使用一级缓存。 ...,查询的结果会放入Session一级缓存中,但是为什么每次调用Hql查询都会生成Sql语句呢?... 属性为: delete 级联删除。 ...// 操作的两方 cascade 值都为 delete 时 // 需要注意: 千万不要在两方都配置级联删除,如果这样配置的话,删除任何一方,都会导致整个关系链对象全部删除。
(有5个值)(没有默认值) save-update 级联保存和级联修改 delete 级联删除 delete-orphan...select语句查询集合内容 join 使用表连接语句查询集合 subselect 同时加载多个对象的集合时,使用子查询语句...extra 极其懒惰,当调用集合的size时,Hibernate只会发送count语句 小结: 使用join时,lazy属性失效,都是立即加载...使用select时,lazy属性正常。 使用subselect,除了在加载多个集合时使用子查询语句外,其他同select。...1、get/load 根据oid进行检索 2、对象导航图检索 3、Sql语句查询 4、Hql语句查询 5、Criteria查询(了解) 四、
Hibernate配置二级缓存: — 使用EhCache 1.hibernate.cfg.xml中配置二级缓存 true</property...: — 当主控方运行save、update、delete操作时,管理对象(被控方)是否进行同步操作, 在映射文件里通过对 cascade属性的设置决定是否对关联对象採用级联操作...在运行delete方法时运行级联操作 eg:对于People — 设置级联删除,当删除People对象的时候,会级联删除关联的IDcard对象,即delete People...时,会先有一条select的SQL,再有两条delet的SQL <one-to-one name=”idcard” calss=”com.mr.idcard.IDcard” cascade
一、Hibernate 1、级联操作 例子: 这样在添加(cascade="delete"),在进行删除操作时...:保存和更新时执行级联操作; delete:删除时执行级联操作; 2、 @Resource //Spring 注入,获取实例 private SessionFactory sessionFactory...回答:get()方法执行查询语句,当查找到不存在的记录时就返回空值,当调用对象属性的 get()方法时,由于属性值为空,因此才会报空指针异常 2)返回多条记录:list...回答:iterator()方法在执行时,首先会查询满足条件的记录的主键列,然后通过主键列再去 执行N条SQL语句
但在hibernate中无法编写sql代码(自己主动生成),所以就导致假设这个项目对sql语句优化查询效率要求特别高的话,就不适合使用hibernate框架了). 2、 假设数据量特别大。...取值范围: save-update:表示当对学生表进行操作保存或更新时,也对班级进行保存或更新(推荐使用) delete:表示仅仅当删除学生时假设涉及到了班级,那么将班级也一起删除 (不推荐使用,当删除学生时会将此班级也删除...假设涉及到了Course(课程)时是否运行级联 取值:save-update:表示仅仅当进行保存或更新时级联操作(这里推荐使用save-update,假设用下面两种,当删除学生时会将课程一起删除) delete...(学生)时是否运行级联 取值:save-update:表示仅仅当进行保存或更新时级联操作(这里推荐使用save-update,假设用下面两种,当删除课程时会将此课程的学生一起删除,假设用此中方式,必须先解除关系后再删除...subselect: 子查询 表示生成子查询的查询sql语句进行查询(推荐使用)。
,会产生1+n条sql语句; fetch = "join"是在查询的时候使用外连接进行查询,不会差生1+n的现象。...比如说院系表和学生表之间是一对多关系,使用cascade, 如删除院系表中的一条院系记录时,该院系下的所有学生记录也自动删除。这种现象称为级联删除。...级联示例 删除院系表dept同时将该院系下所有学生student删除。可以在院系类映射文件中如下定义。 <column name...3、延迟加载 (1) 属性的延迟加载 如Person表有一个人员图片字段(对应java.sql.Clob类型)属于大数据对象,当我们加载该对象时,我们不得不每一次都要加载这个字段,而不论我们是否真的需要它
如果程序能够自动生成SQL语句就好了....那么Hibernate就实现了这个功能! 简单来说:我们使用Hibernate框架就不用我们写很多繁琐的SQL语句,从而简化我们的开发!...QBC查询: query by criteria 完全面向对象的查询 从上面的HQL查询,我们就可以发现:HQL查询是需要SQL的基础的,因为还是要写少部分的SQL代码....QBC查询就是完全的面向对象查询...(); System.out.println(list); 本地SQL查询 有的时候,如果SQL是非常复杂的,我们不能靠HQL查询来实现功能的话,我们就需要使用原生的SQL来进行复杂查询了!...接着我们测试级联删除操作。...这里写图片描述 可在HibernateAnnotationTest单元测试类中编写如下方法进行测试: public class HibernateAnnotationTest { // 测试多对多级联删除
查询 在Hibernate中使用查询时,一般使用Hql查询语句。...3.cascade属性 级联操作:指当主控方执行某项操作时,是否要对被关联方也执行相同的操作。 cascade属性的作用是描述关联对象进行操作时的级联特性。...Cascade 是直接对集合中每个元素执行相应的处理 执行的时机不同 Inverse是在执行SQL语句之前判断是否要执行该SQL语句 Cascade则在主控方发生操作时用来判断是否要进行级联操作...特别是删除,一定要慎重。 操作建议: 一般对many-to-one和many-to-many不设置级联,这要看业务逻辑的需要;对one-to-one和one-to-many设置级联。...**更新时间戳区域,记录数据最后更新时间,在使用二级缓存时,比较缓存时间t1 与更新时间 t2 , 如果 t2 > t1 丢弃原来缓存数据,重新查询缓存 查询缓存 有人称查询缓存 为hibernate
、级联查询,普通删除 pom.xml org.springframework.data...return list; } 我们发现在查询role的时候,实际上hibernate自动帮我们查询了当前role下面的所有admin信息,并且封装到了set里面,也就是数据已经包装好了。...信息,所以关联数据hiberante默认使用懒加载机制,所谓的懒加载就是我们需要使用这个数据他 才去查询,你不使用,H就不查询,但是必须建立在session不关闭的情况下, @OneToMany...需要手动开启 @ManyToOne(fetch=FetchType.LAZY) 多对多 hibernate多对多当中,我们常常希望只删除一方已及对应的关系,但不想删除另一方 表user和表role多对多...role` (`roleId`) ON DELETE NO ACTION ON UPDATE NO ACTION) 解决方案:在数据库里更改user_role表结构,就是添加约束,就添加roleId的删除时进行级联操作
本质:Map集合、键是ID、值是对象,Hibernate会把所有查询到的对象,放入缓存中。 如果再次查询相同的对象,会先从缓存中找。目的:为了提高效率。...快照:快照是为了对比缓存中的对象是否发生变化,来决定事务提交时,是否需要修改数据。.../Criteria与缓存的关系 => 查询到的对象会放入缓存中,但是每次查询都要发送sql语句。...在对象中如何表达一对多关系:在一的一方使用集合表达持有多的一方,在多的一方引用一的一方的对象。 ... delete 级联删除 delete-orphan 孤儿删除 all save-update + delete
cascade:指定要使用的级联操作 fetch:指定是否采用延迟加载 orphanRemoval:是否使用孤儿删除 3.1.1.2@ManyToOne 作用: 建立多对一的关系...* 删除主表数据: * 有从表数据引用 * 1、不能删除 * 2、如果还想删除,使用级联删除 * 没有从表数据引用:随便删 *.../** * 删除操作 * 在多对多的删除时,双向级联删除根本不能配置 * 禁用 * 如果配了的话,如果数据之间有相互引用关系,可能会清空所有数据...查询所有操作 Query:使用HQL语句查询 Query:使用JPQL查询 查询语句的形式不一样。...只做级联删除
如下,摒弃饿SQL执行出现报错,因为role在执行往中间表执行insert操作时表中已经存在了user插入的数据,所以出现了主键冲突的报错 因此需要user和role一方放弃维护权,修改Role实体类中关联关系...(){ User one = userDao.findOne(2L); userDao.delete(one); } 执行的SQL如下图 查看数据库表,三张表中关联数据已被删除...多表查询 对象导航查询:查询一个对象的同时,通过此对象查询他的关联对象 使用Chapter 04 中的 one2many项目,在test包中新建ObjectQueryTest测试类 @RunWith...对象导航查询默认使用延迟加载的形式查询,调用getOne方法不会立即发送查询,而是在使用关联对象的时候才会执行,如果将延迟加载改为立即加载,需要修改配置 fetch配置关联对象的加载方式 FetchType.LAZY...,查询结果为集合或者列表,默认使用延迟加载 从多方查询一方,默认使用立即加载 Spring Data JPA 完结
发现Hibernate只执行了三条SQL语句。...这里写图片描述 如果我们在dept中设置了级联保存,那么Hibernate就会知道:保存dept的数据时,发现dept了外键,也把dept外键的对象保存在数据库之中 <set name="set...这里写图片描述 ---- <em>级联</em><em>删除</em> <em>级联</em><em>删除</em>,这个对于我们来说风险太大了,如果<em>删除</em>了某些数据,会把另外有关联的数据也<em>删除</em>…在实际中我们一般不<em>使用</em>!...NULL 在<em>查询</em>数据<em>时</em> 有无控制权对<em>查询</em>数据没有任何影响 在解除关联关系<em>时</em> 有控制权--->可以解除关联关系 没有控制权--->不能解除关联关系,不会生成update语句,也不会报错 在<em>删除</em>数据<em>时</em>对关联关系的影响...<em>级联</em>保存、更新、<em>删除</em> 我们可能<em>使用</em>到的往往是:save-update这个值,因为<em>级联</em><em>删除</em>的风险太大了!
领取专属 10元无门槛券
手把手带您无忧上云