junit可以让你在一个java在原始文件中写下多种测试方法,然后你可以在不与其他方法冲突的情况下逐一进行测试。
hibernate主要有日志系统slf接口定义,在此之下,实现他的存在slf4j,log4j,..,但是我们在hibernate做日志时,不仅需要slf的api,我们还需要他和他的实现slf与其实现转换器(因此需要三个)jar这是一种适配器模式)。JUNIT提供单元调试的能力,即提供给某个单元class(或方法)测试。
注释的好处:举个简单的例子,我们用@override当你重写父亲的方法时,如果你没有注释,你写错了,但不会报告错误(他会作为你自己定义的方法),加上注释,他知道,哦,你的男孩想重写,然后去找父亲的方法,然后给你一个提示。
ID生成策略:native(hibernate做决定),identity(sqlserver),sequence(oracle),uuid(世界上唯一)xml或者annotation
用联合主键,就一定要实现序列化和重写equals,hashcode方法
单粒模式是指一个类只打开一个例子,并向整个系统提供自己的例子。
sessionfactory最重要的维护是数据库连接池,每个session是客户端和服务器端的对话。
session的currentsession有两个thread和jta(java trasaction api)(分布式数据库事务)
jpa(java persistence api)
getcurrentsession和opensession生成的session不是同一种session,所以两者不能混用
对象的三种状态:瞬态(未)save,不在缓存中,只是独立存在),持久(save之后,有数据库和缓存),托管(提交后,session缓存断了,不是在缓存中,而是在内存中)
session内存中的缓存(先找缓存,再找数据库),为了提高效率,不去数据库再取数据,session内存中有一个缓存,存储对象的参考(map类型)
session管理数据库的添加、删除和检查
save(),delete(),load(,)(拿出来就是持久状态),get(),update()
load与get区别:当用load当返回时,只有一个对象代理没有找到数据库,而是在使用该对象时找到数据库;和get立即连接数据库,返回真实对象
可以在p状态下更新
在xml中指定dynamic-update为true,局部动态更新(前提是对象在缓存中)spa> session.merge(s)合并数据库里的与s,局部更新,先select,然后对比,然后合并。 hql(ejbql,面向对象的查询语言)语句和sql语句差不多,只不过是更新对象而不是记录。 session.clear()是强制清理缓存;session.flush()是强制同步缓存和数据库(推到数据库里);