分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

Hibernate学习(二)

发布时间:2023-09-06 01:54责任编辑:林大明关键词: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学习(二)

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved