Hibernate学习
Posted ricardowx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate学习相关的知识,希望对你有一定的参考价值。
一、Hibernate持久化状态
瞬时态
瞬时态也称为临时态或者自由态,瞬时态的实例是由new命令创建、开辟内存空间的对象,不存在持久化OID(相当于键),尚未与Hibernate Session建立关联,在数据中也没有任何记录,失去引用后被JVM回收。瞬时态对象在内存中是孤立存在的,与数据库中的数据无任何关联,仅仅是信息的载体。
持久态
持久态的对象存在持久化的标识OID,加入Session缓存中,并且相关联的Session没有关闭,在数据库中有相应的记录,每条记录只对应唯一的持久化对象,需要注意的是,持久态对象是在事物还未提交前变为持久态的。
托管态
托管态也称为离线态或者游离态,当某个持久化状态的实例与Session的关联被关闭时就变成了托管态。托管态对象存在持久化标识OID,并且仍然与数据库中的数据存在关联,只是失去了与当前Session的关联,托管对象发生改变时Hibernate不能检测到。
三种状态的对比:
是否能在数据库存在记录 | 是否存在OID | 是否由Session管理 | 是否能发sql语句 | |
---|---|---|---|---|
瞬时态 | 否 | 否 | 否 | 否 |
持久态 | 是 | 是 | 是 | 是 |
托管态 | 是 | 是 | 否 | 否 |
三种状态的转化图:
二、Hibernate通过实体类建立数据库表
Hibernate通过实体类建立数据库表只需在Hibernate.cfg.xml文件中配置
<property name="hbm2ddl.auto">update</property>
这个配置还有其他参数:
- create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失。
- create-drop:启动hibernate时,自动创建表,程序关闭时,自动把相应的表都删除。所以程序结束时,表和数据也不会再存在
三、遇到的问题
当使用上面的配置来创建数据库表会显示创建表的sql语句有问题。这时需要修改Hibernate.cfg.xml的配置。将
<property name="hibernate.dialect">org.hibernate.dialect.mysqlDialect</property>
替换为
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
替换之后建表成功。
以上是关于Hibernate学习的主要内容,如果未能解决你的问题,请参考以下文章