A org.hibernate.SessionFactory
is used to obtain org.hibernate.Session
instances. A org.hibernate.Session
represents a single-threaded unit of work. The org.hibernate.SessionFactory
is a thread-safe global object that is instantiated once.
If you give the org.hibernate.SessionFactory
a name in your configuration, Hibernate will try to bind it to JNDI under that name after it has been built. Another, better option is to use a JMX deployment and let the JMX-capable container instantiate and bind a HibernateService
to JNDI. Such advanced options are discussed later.
1.通过用户类库来组织框架的Jar包集体导入,方便管理
2.各个版本的的jar下载地址:http://sourceforge.net/projects/hibernate/files/
3.hibernate-annotations-3.4.0.GA下载地址:
http://www.brothersoft.com/hibernate-annotations-download-69011.html
当要使用annotation:
hibernate-annotations.jar
hibernate-commons-annotations.jar
ejb3-persistence.jar
4.在Hibernate 2.x里,多数情况下表示映射关系的元数据保存在XML文本文件中. 还有一种方式就是Xdoclet,它可以在编译时利用Javadoc中的源码注释信息来进行预处理. 现在新的JDK标准(JDK1.5以上)也支持类似的注解功能,但相比之下很多工具对此提供了更强大更好用的支持. 以IntelliJ IDEA和Eclipse为例,这些IDE工具为JDK 5.0注解功能提供了自动完成和语法高亮功能. 注解被直接编译到字节码里,并 在运行时(对于Hibernate来讲就是启动的时候)通过反射读取这些注解, 因此外部XML文件就不再需要了.
5.为了简化从hbm文件到注解的迁移过程, 配置机制将自动检测在注解和hbm文件中重复的映射。 默认情况下hbm文件中的声明比类中的注解元数据具有更高的优先级。 这种优先级的设定是以类为单位的。 你也可以通过hibernate.mapping.precedence修改这种优先级。 默认的值是hbm, class, 如果改为class,hbm,当发生冲突的时候,类中的注解将比hbm文件具有更高的优先级.
6.JPA是一组接口规范,欲"统一天下",此规范,hibernate的作者也参与
7.slf4j,萨拉风4j,哈哈,读法有趣,slf是一组接口规范,又是规范,又是标准,厉害
8.SessionFactory-线程安全,Session-线程不安全
9.当<gererator的class为native时,会根据指定的dialect来生成主键,毕竟不同数据库有不同实现方式,identity也符合mysql的方式
10.当<gererator的class为assigned时,意味着我们需要自己写代码类生成键值(也就是业务主键)
11.hibernate把JDBC的checked exception转换成unchecked exception,因此上层代码操作起来很清爽
12.hibernate根据dialect来生成sql,所以dialect设置很重要
13.当要通过反射来实例化一个类的时候,记得要有无参构造函数,ibatis的时候,曾经碰到过这个问题,现在印象深刻了
14.<property name="current_session_context_class">thread</property>
只能通过getCurrentSession()获得Session,这样的session适合在多线程中解决数据共享的问题,不容易出共享混乱
15.
get()-->一级缓存-->db-->null;
load()-->一级缓存--->2级缓存-->db-->exception