hibernate-1

get和load:
相同:两者都是一级,二级,数据库查找,
不同:1 查找不到get返回null,load异常
2 get一定是返回实体对象,load在lazy=true(默认lazy=true,映射文件上类级别可配lazy属性)且一级缓存查不到时返回cglib代理对象,使用对象时再查询二级缓存和数据库

一级缓存无并发访问问题
二级缓存生命周期长,默认不开启,需自己配置,可能出现并发访问,适合放很少修改,偶尔并发也无关紧要的数据

在hql里使用参数(防止sql注入):?或冒号加参数名,?则用参数位置设置值,冒号用参数名设置值

getCurrentSession:常用实现是线程本地,内部也会调用openSession()进行创建和保存,事务提交会关闭session,并从线程本地移除session
openSession()的事务提交不会关闭session,需手动关闭

save:数据插入,得到主键id,设置给对象,但插入的记录是加了X锁的,我们查不到
update: update时不更新,所以不知道数据库是否已有此id,但会检查id是否为null,事务提交时更新

要不在连接字符串指定默认数据库,要不在映射处用catalog指定数据库
hibernate.cfg.xml可含mapping resource或mapping class来查找映射文件或映射类
hibernate可以自动建表,像@Column里的属性(如length)不是用来校验,而是用来建表的

主键GenerationType:
Table: select tbl.next_val from hibernate_sequences tbl where tbl.sequence_name=? for update
Sequence: select next_val as id_val from hibernate_sequence for update
Identity: 直接插入,获取返回id
Auto:数据库自主选择,我这边实验用的是Sequence

对象状态追踪:如get或save放入缓存后,未修改则commit时不更新,修改过则commit时更新,其实commit时进行了dirty check,PersistenceContext内含Object(当前对象)和EntityEntry(内含对象的loadedState,即初始状态)的映射,进行状态比较决定是否更新

试验:LockMode
PESSIMISTIC_READ:get使用此模式,mysql下是lock in share mode
PESSIMISTIC_WRITE:get使用此模式,mysql下是for update
比如使用msyql,使用MySQLDialect,Dialect内定义了各类LockMode对应的加锁语句(如for update)

switch ( lockMode ) {
			case UPGRADE:
				return getForUpdateString();
			case PESSIMISTIC_READ:
				return getReadLockString( timeout );
			case PESSIMISTIC_WRITE:
				return getWriteLockString( timeout );
			case UPGRADE_NOWAIT:
			case FORCE:
			case PESSIMISTIC_FORCE_INCREMENT:
				return getForUpdateNowaitString();
			case UPGRADE_SKIPLOCKED:
				return getForUpdateSkipLockedString();
			default:
				return "";  //代码为dialect的判断,MySQLDialect重写了getReadLockString
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值