3.1参考手册学习摘要(一)

来源:互联网 发布:彩票网络销售是什么鬼 编辑:程序博客网 时间:2024/05/18 03:06

hibernate3.2中文参考手册,下载地址http://wiki.redsaga.com,感谢翻译者的无私奉献.

1.必需的包
antlr.jar,cglib.jar,asm.jar,asm-attrs.jars,commons-collections.jar,
commons-logging.jar,hibernate3.jar,jta.jar,dom4j.jar,log4j.jar

2.自动匹配映射
<hibernate-mapping>
    <class name="events.Event" table="EVENTS">
        <id name="id" column="EVENT_ID">
            <generator class="native"/>
        </id>
        <property name="date" type="timestamp" column="EVENT_DATE"/>
        <property name="title"/>
    </class>
</hibernate-mapping>
title的映射没有column属性,这时hb自动映射到相同名称列上,即映射到表EVENTS的title列上.本行也没有type属性,hb自动进行类型转换.

3.启动报错
java.lang.NoClassDefFoundError: antlr/ANTLRException
原因:antlr-2.7.6.jar,不是ant-antlr-1.6.5.jar,替换为正确的包后运行正常.

4.hibernate.cfg.xml
<property name="hbm2ddl.auto">update</property>
此处控制在运行时是否重建表

5.对于POJO类,必须有一个无参数的构造函数,以便利用反射机制实例化这个类.

6.hb在启动时会自动在classpath的根查找名为hibernate.cfg.xml的配置文件.

7.在系统中一般用单例模式设计对SessionFactory的获取.

7.在hibernate.cfg.xml中配置为"thread",表示程序中从sessionFactory.getCurrentSession()后,session的生命周期开始,并被绑定到当前线程上.当事务提交或回退时,hb将session从线程上剥离并关闭它.如果再一次getCurrentSession(),会得到一个新的session,并开始新的一个工作单元.

8.在hb中,不管是哪种DML语句都必须放在事务中运行,即使是SELECT查询语言.

9.同步内存状态和数据库的过程,通常只在单元操作结束的时候发生,称此过程为清理缓存(flushing).

10.调用update(obj)可以使用脱管的obj对象重新持久化.

?11.所谓的值类型,简而言之就是没有相应POJO类,在.hbm.xml没有定义成class的类型?如果定义成n-to-n的关系,class属性的值无法指明(因为没有相应的POJO类).

12.在一个双向关系中,为了帮助hb正确地执行INSERT和UPDATE(以避免违反数据库约束),需要设置inverse属性.一对多关联中必须设在many那端,多对多可以任选取一端设置.

13.一个servlet开启多个thread,每一个thread绑定一个session,每一个session里可以包含多个(交叉或非交叉的)事务.