码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate学习(二)

时间:2018-05-15 15:53:21      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:建立数据库   事物   sql   修改   不能   显示   程序   ESS   建表   

一、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学习(二)

标签:建立数据库   事物   sql   修改   不能   显示   程序   ESS   建表   

原文地址:https://www.cnblogs.com/RicardoWX/p/9041019.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!