重新认识你认识的Hibernate(二)

Hibernate估计大家已经用过很多年了吧,好多同学说用过Hibernate,不需要你来讲,但再仔细想想,你能告诉我Hibernate是什么吗?

今天带大家重新认识一下你认识的Hibernate。

Hibernate 概述:持久化对象的生命周期

Transient Objects:使用new 操作符初始化的对象不是立刻就持久的。它们的状态是瞬时的,也就是说它们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其它对象所引用),它们的状态将会丢失,并由垃圾回收机制回收。

Persist Objects:持久实例是任何具有数据库标识的实例。它有持久化管理器Session统一管理,持久实例是在事务中进行操作的——它们的状态在事务结束时同数据库进行同步。当事务提交时,通过执行SQL的INSERT、UPDATE和DELETE语句把内存中的状态同步到数据库中。

Detached Objects:Session关闭之后,持久化对象就变为detached对象。表示这个对象不能再与数据库保持同步,它们不再受Hibernate管理。

Hibernate 概述:Hibernate基本数据类型

Hibernate 概述:Hibernate大对象数据类型

在java中,java.lang.String可以用来表示长字符串(长度超过255),字节数组byte[]可以用来存放图片或文件的二进制数据。此外在JDBCAPI中还提供了java.sql.Clob和java.sql.Blob类型,分别和标准SQL的CLOB和BLOB类型相对应。CLOB表示字符串大对象(CharacterLarger Object),BLOB表示二进制大对象(BinaryLarger Object)

Hibernate 概述:Hibernate主键策略

Hibernate主键的映射<id>标签的DTD文档如下

<!ELEMENTid (meta*, column*, generator?)>

<!ATTLISTid

name CDATA #IMPLIED

node CDATA #IMPLIED

access CDATA #IMPLIED

column CDATA #IMPLIED

type CDATA #IMPLIED

length CDATA #IMPLIED >

典型的主键映射代码如下

<id name="id" column="t_id"type="integer">

<generatorclass="identity" />

</id>

Hibernate对主键的管理分为三大类

1.Hibernate对主键id赋值

2.应用程序自己对主键id赋值

3.由数据库对主键id赋值

Hibernate 概述:Hibernate主键策略

<id>标签的可选元素<generator>子元素是一个java类的名字,用来为该持久化类的实例生成唯一的标识,所有的生成器都实现org.hibernate.id.IdentifierGenerator接口。Hibernate提供了很多内置的实现类。

1.assigned:主键由外部程序负责生成,无需Hibernate参与,主键由应用逻辑产生,实体对象再保存之前,必须显式的设置OID,主键的产生无需Hibernate的干预

<generatorclass="assigned"/>

2.Increment:hibernate将按照递增的方式设定主键,具体的方式是

先获取当前记录主键的最大值,然后再将该值加1作为主键。

<generator/>

3.Identity:表示数据库的主键生成方式为采用数据库的主键生成机制,例如SQLServer或MySQL的自动主键生成机制。

<generator/>

4.Sequence:这种方式针对由序列方式产生主键的数据库,例如Oracle。在<generator>的子元素<param name=“sequence”>指定用作产生主键的序列名称。

<id name="id" column="t_id"type="integer">

<generatorclass="sequence">

<paramname="sequence">H_SOME_SEQUENCE</param>

</generator>

</id>

5.Native:意味着将主键的生成机制交由Hibernate决定,Hibernate会根据配置文件中的方言(Dialect)定义,采用不同的数据库特定的主键生成方式。这是我们最常使用的方式

<generatorclass="native"> <paramname="sequence">H_SOME_SEQUENCE</param> </generator>

声明:本文章属于个人原创,转载请注明文章出处。

原文发布于微信公众号 - 全华班(quanhuaban)

原文发表时间:2018-03-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏hotqin888的专栏

golang beego orm无限条件查询,多条件查询,不定条件查询,动态多条件查询sql语句,一个字段匹配多值

其实我的需求就是:一个树状目录,每个目录下都存有成果,给定某一个上级目录id,分页查询出这个目录下以及子孙目录下的所有成果,要求分页。

3352
来自专栏我爱编程

Day24访问数据库

使用SQLite SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在i...

3744
来自专栏陈本布衣

SQLite 带你入门

SQLite数据库相较于我们常用的Mysql,Oracle而言,实在是轻量得不行(最低只占几百K的内存)。平时开发或生产环境中使用各种类型的数据库,可能都需要...

3865
来自专栏Vamei实验室

来玩Play框架05 数据库

数据库是整个站点的数据储藏室。用户提交的数据可以存储在数据库中,以便未来使用。Play可以通过JDBC和数据库通信。我讲介绍Play和mysql数据库的连接。 ...

2039
来自专栏后台架构

Sphinx源码学习笔记(一):索引创建

  因为项目开发需要在游戏内部实现玩家名称的模糊查找功能,本身直接使用Sphinx配置mysql可以直接搭建一套模糊匹配的即可支持功能的实现。

3747
来自专栏零基础使用Django2.0.1打造在线教育网站

利用Flask搭建微电影视频网站(二):项目优化与模型设计

努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

2331
来自专栏前端侠2.0

oracle中,通过触发器,记录每个语句影响总行数

       业务系统中,有一步“抽数”流程,就是把一些数据从其它服务器同步到本库的目标表。这个过程有可能 多人同时抽数,互相影响。有测试人员反应,原来抽过的数...

952
来自专栏个人分享

SparkSQL(源码阅读三)

  额,没忍住,想完全了解sparksql,毕竟一直在用嘛,想一次性搞清楚它,所以今天再多看点好了~

1842
来自专栏数据库

使用VBA创建Access数据表

导读: 本期介绍如何在Access数据库中创建一张空数据表。下期将介绍如何将工作表中的数据存入数据库对应的表中,随后还将介绍如何从数据库的表中取出数据输出到Ex...

2127
来自专栏更流畅、简洁的软件开发方式

预防SQL注入攻击之我见

1、 SQL注入攻击的本质:让客户端传递过去的字符串变成SQL语句,而且能够被执行。 2、 每个程序员都必须肩负起防止SQL注入攻击的责任。   说起防止SQ...

4186

扫码关注云+社区