该文被密码保护。
posted @ 2018-01-10 15:56
bobo2018
随笔分类 - Hibernate
摘要:单表查询使用 Criteria 很方便,进行子查询就比较麻烦了; 值得注意的是,当使用 Restriction.in("propertyName",list ),当 list 为 null 时,会出现异常,应该是 SQL 语法问题,因为 list 为 null,拼接成的 SQL 就有 "IN ()"
阅读全文
posted @ 2017-02-10 11:38
摘要:如题。 可能是版本的问题,Hibernate 5 中,使用关联映射会使 Hibernate 发出关于 DDL 增加外键约束,而且对于使用 Hibernate 的方式,即使用面向对象的方式进行数据库操作的方式,这是必须的,因为没有数据库级别的外键约束,使用不当会造成脏数据的产生,例如,order.se
阅读全文
posted @ 2017-01-11 16:23
摘要:我的确不太喜欢关联映射,但还是有很多人使用关联映射,而是否使用可能不是我自己可以决定的,所以就深入地总结下关联映射; Hibernate入门(2)已经描述了一部分关于关联映射的知识,这里写一下深入的; 主要就是分析两个重要的注解,这里暂时只总结单向1对N的且不用连接表的情况,当然,这样插入带有ord
阅读全文
posted @ 2017-01-11 15:29
摘要:直接上代码: UserRole.java UserRoleCompositePK 这样,数据库就会新增一个具有复合主键的表 sys_users_roles。 以上。
阅读全文
posted @ 2016-12-20 16:16
摘要:1,关联映射,LAZY 加载,查询实体,不会查询关联实体,当触发查询关联实体,会查询关联实体,底层 SQL 是 select * from XXX where xxid(外键,指向主表的 id) = ?,所以会造成 N + 1 问题,效率可能相当低;EAGAR 加载,底层是左连接查询,效率较低; 2
阅读全文
posted @ 2016-12-09 16:31
摘要:避免使用 AUTO Flush,其不确定;应该使用 MANUAL,明确更新实体的时机; 不过,auto flush 也可以接受; 批量更新就应该设置 rewriteBatchedStatements=true 和 batch_size(实体更新,注意避免 OME) 或者 allowMultiQuer
阅读全文
posted @ 2016-10-19 16:22
摘要:暂时阅读了 Hibernate 的 Session 的 save(),update(),flush(),觉得大概了解了 Hibernate 的实体持久化,在此记录一下; 介绍下几个关键的地方, 1,Hibernate 的持久化操作的实际执行者都是 Listener 对象,调用 onXXX() 方法进
阅读全文
posted @ 2016-10-19 11:56
摘要:Hibernate 的 flush 是指将 Hibernate 内存里的对象的状态同步到数据库,就是等同于更新操作; flush 的行为与 flushMode 直接相关,有四种; flushMode有四种: 1,manual,要手动调用session的flush()方法才能进行操作; 2,commi
阅读全文
posted @ 2016-10-19 11:35
摘要:之前一直以为 MySQL Driver 不支持 executeBatch,近来发现其是支持 executeBatch 的,在 URL 上加上 rewriteBatchedStatements=true,且设置 batch_size 为 5 到30,即可进行 executeBatch; 要注意的是,H
阅读全文
posted @ 2016-10-19 10:28
摘要:MySQL 的服务器端游标不能滚动,那说明其游标是假的游标,不是传统意义上的游标,但使用 Hibernate 的 Scrollable 仍能起到一定的作用(其作用是避免 OME),因为虽然并不太理想,仍然会把全部记录一次过获得,但并没有把这些记录转化成实体并放进一级缓存,可以 get 一个,sess
阅读全文
posted @ 2016-10-19 10:16
摘要:1,要注意 session 的 flushmode,例如,如果 flush mode 为 commit,即 commit 才会 flush,那么程序中先改后查就会变成先查后改; 2,使用 OpenSessionInViewInterceptor,会将 flush mode 设为 manual,如果数
阅读全文
posted @ 2016-10-11 21:47
摘要:光设置 scale 属性不会成功,设置 scale 为 6 还是 4,加载后数据库的对应字段的小数位都为 2,precision 和 scale 都设置了,才会设置成功。
阅读全文
posted @ 2016-08-29 15:10
摘要:设置为 true 后,更新持久化实体时,只更新修改过的字段,提高性能,注意,实体的状态需为持久化状态;
阅读全文
posted @ 2016-08-29 09:43
摘要:使用过滤器可以进行大范围的类级别或者方法级别的查询过滤,特别是根据用户或者根据公司筛选的时候特别有用;
阅读全文
posted @ 2016-08-04 13:07
摘要:以下的情况都是操作非持久化的实体; 1,持久化实体的方法 save,立即将实体对应的记录插入数据库,并返回标识属性值; persist,保证被调用处不在事务内的话,不会立即将记录马上插入数据库,在长会话流程中很有用(有疑问),不返回标识属性值; 2,根据主键加载实体 load:调用此方法时,将会返回
阅读全文
posted @ 2016-08-04 11:50
摘要:1,避免单向关联映射,如果要使用关联映射,应该使用双向的1对N映射或者双向的N对1映射,避免使用双向的N对N映射; 2,sql应该解耦在文件中; 3,避免使用二级缓存,其容易引发内存溢出,避免使用查询缓存,缓存的命中率通常较低,以hql/sql作为缓存的key,命中率的确低,而缓存就会占用着内存或者
阅读全文
posted @ 2016-07-28 20:43
摘要:Hibernate的确在一定程度上提高了软件的开发效率,使我们不用写大量基本的sql,能很好地整合缓存(如ehcache),良好的数据库移植性,还有很多人都喜欢用的关联映射(处理主表与从表的级联操作); 本文讨论的是关联映射的利与弊; 利:1,EAGER加载;2,级联操作能减少程序员的工作量; 弊:
阅读全文
posted @ 2016-06-16 11:12
摘要:Hibernate里面的锁: NONE:无锁,全部锁操作最后都会变成这个锁策略; READ:读锁,即共享锁,允许多个事务共同读同一部分数据,进行读操作室自动加上读锁; WRITE:写锁,写操作时对数据进行绑定,进行写操作时自动加上写锁; UPGRADE:悲观锁,会加上select...for upd
阅读全文
posted @ 2016-05-04 16:01
|