标签:建立数据库 事物 sql 修改 不能 显示 程序 ESS 建表
瞬时态也称为临时态或者自由态,瞬时态的实例是由new命令创建、开辟内存空间的对象,不存在持久化OID(相当于键),尚未与Hibernate Session建立关联,在数据中也没有任何记录,失去引用后被JVM回收。瞬时态对象在内存中是孤立存在的,与数据库中的数据无任何关联,仅仅是信息的载体。
持久态的对象存在持久化的标识OID,加入Session缓存中,并且相关联的Session没有关闭,在数据库中有相应的记录,每条记录只对应唯一的持久化对象,需要注意的是,持久态对象是在事物还未提交前变为持久态的。
托管态也称为离线态或者游离态,当某个持久化状态的实例与Session的关联被关闭时就变成了托管态。托管态对象存在持久化标识OID,并且仍然与数据库中的数据存在关联,只是失去了与当前Session的关联,托管对象发生改变时Hibernate不能检测到。
三种状态的对比:
是否能在数据库存在记录 | 是否存在OID | 是否由Session管理 | 是否能发sql语句 | |
---|---|---|---|---|
瞬时态 | 否 | 否 | 否 | 否 |
持久态 | 是 | 是 | 是 | 是 |
托管态 | 是 | 是 | 否 | 否 |
三种状态的转化图:
Hibernate通过实体类建立数据库表只需在Hibernate.cfg.xml文件中配置
<property name="hbm2ddl.auto">update</property>
这个配置还有其他参数:
当使用上面的配置来创建数据库表会显示创建表的sql语句有问题。这时需要修改Hibernate.cfg.xml的配置。将
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
替换为
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
替换之后建表成功。
标签:建立数据库 事物 sql 修改 不能 显示 程序 ESS 建表
原文地址:https://www.cnblogs.com/RicardoWX/p/9041019.html