hibernate框架(三)持久化类&主键生成策略

一 持久化类的一个编写规则
持久化:将内存中的一个对象持久化到数据库中的过程
持久化类:一个Java对象与数据库的表建立了映射关系,那么这个类在hibernate中称为持久化类
可以这么理解:持久化类=Java类+映射文件

持久化类的编写规则
1 对持久化类提供一个无参的构造方法
2 属性需要私有,对私有属性提供get和set方法
3 对持久化类提供一个唯一标识Oid与数据库中主键对应
4 持久化类中属性尽量使用包装类类型
5 持久化类不要使用final进行修饰



二 主键生成策略
先介绍一下主键的分类:自然主键和代理主键
自然主键:主键的本身就是表中的一个字段(试题中的一个具体的属性 身份证号)
代理主键:主键的本身不是表中必须的一个字段(不是实体中某个具体的属性)
在实际开发中,尽量使用代理主键
为什么不推荐使用自然主键,因为一旦自然主键参与到业务逻辑中,后期可能修改源代码
好的程序设计满足OCP原则:对程序的扩展是open的。对修改源代码是close的



主键生成策略(记住):
increment hibernate中提供的自动增长机制,单线程可以使用,多线程不可以
identity 使用的是数据库底层的自动增长机制(适用于MySQL SQL server,但是Oracle不适合)
sequence 采用的是序列的方式(适用于Oracle,MySQL就不适用)】
uuid 适用于字符串类型的主键
native 本地策略 ,可以在identity和sequence之间进行自动转换
assigned hibernate放弃外键的管理

结合不同的情况去使用
编程中遇到的问题
没有写自动生成语句的配置 ,导致hibernate不能为你创建表

<property name="hibernate.hbm2ddl.auto">update</property>


三 持久化类的三种状态
hibernate是持久层框架,通过持久化类完成ORM操作。Hibernate为了更好的管理持久化类
将其分为三种:瞬时态、持久态、托管态
瞬时态:这种对象没有唯一的标识OID,没有被session管理
持久态:这种对象有唯一标识OID,被session管理
托管态:这种对象有唯一标识OID,没有被session管理
下面代码演示:这段程序包含了持久化的三种状态

public class TestDemo2 {
    @Test
    public void demo1(){
        Session session = HibernateUtils.openSession();
        Transaction beginTransaction = session.beginTransaction();

        Customer customer=new Customer();
        customer.setCust_name("王六");//瞬时态对象。没有唯一标识的OID,没有session管理        

        Serializable id = session.save(customer);//持久态对象。有了唯一标识的OID,调用了session

        beginTransaction.commit();
        session.close();
        System.out.println(customer.getCust_name());//托管态对象。有唯一标识的OID,session被销毁了
    }
}

我们重点研究的是持久态对象,
持久化类的持久态对象,可以自动更新数据库。

明天会继续更新!

原文地址:https://www.cnblogs.com/bao6/p/10340122.html

时间: 2024-12-13 11:39:55

hibernate框架(三)持久化类&主键生成策略的相关文章

hibernate id主键生成策略

数据库的设计和操作中,我们通常会给表建立主键. 主键,可以分为自然主键和代理主键. 自然主键表示:采用具有业务逻辑含义的字段作为表的主键.比如在用户信息表中,采用用户的身份证号码作为主键.但是这样一来,随着业务逻辑的变化,主键就有可能要更改.比如,假设哪天身份证号码升级成19,2位,那....... 代理主键:在表中人为的增加一个字段,该字段并没有表示任何的业务逻辑,仅仅用来标识一行数据.比如说在用户信息表中,增加一个用户ID的字段.用来表示该条用户信息的记录. 通常情况下,用的比较多的是代理主

Hibernate遇到oracle之主键生成策略

一直用Hibernate+mysql,感觉Hibernate很好用,也出过什么大问题:这周,公司的产品要部署到Orecle,虽然产品号称支持Oracle但是我自己知道,这个产品压根儿就没在Oracle上测试过,更不要是使用了.于是就开始紧罗密布的测试了,问题自然一大堆,现在说一个关于主键生成策略的问题. 首先,众所周知,Hibernate可以自动建表.当我们把项目部署好,运行的时候发现,确实自动建表了,但是少了很多表,就是有的表生成了,有的表木有生成,这就让人很头疼了.一波操作之后,发现Hibe

三大框架 之 Hibernate生成策略与缓存策略(主键生成策略、持久化、持久化类划分、一级缓存、事物管理)

目录 Hibernate生成策略与缓存策略 主键生成策略 主键分类 主键的生成策略 持久化 什么是持久化 什么是持久化类 持久化类编写规则 持久化类的划分 三种状态区分 持久态对象特征 一级缓存 什么是缓存 一级缓存 一级缓存特点 一级缓存内部结构 事务管理 什么是事务 事务特性 事务的隔离级别 Hibernate设置事务的隔离级别 事务业务层连接 Hibernate生成策略与缓存策略 主键生成策略 主键分类 自然主键 主键本身就是表中的一个字段 实体中一个具体的属性,对象本身唯一的特性 创建一

(转) Hibernate持久化类与主键生成策略

http://blog.csdn.net/yerenyuan_pku/article/details/65462930 Hibernate持久化类 什么是持久化类呢?在Hibernate中持久化类的英文名称是Persistent Object(简称PO),PO=POJO+hbm映射配置文件. 对于Hibernate中的PO,有如下编写规则: 必须提供一个无参数的public构造方法. 所有属性要用private修饰,对外提供public的get/set方法. 在PO类必须提供一个标识属性,让它与

Hibernate框架的主键生成策略

在Hibernate中,id元素的<generator>子元素用于生成持久化类的对象的唯一标识符,也就是主键.Hibernate框架中定义了许多主键生成策略类,也叫生成器类.所有的生成器类都实现了org.hibernate.id.IdentifierGenerator接口.通过实现IdentifierGenerator接口来创建自己的生成器类.Hibernate框架提供了许多内置的生成器类: assigned increment sequence hilo native identity se

hibernate框架学习笔记4:主键生成策略、对象状态

创建一个实体类: package domain; public class Customer { private Long cust_id; private String cust_name; private String cust_source; private String cust_industry; private String cust_level; private String cust_linkman; private String cust_phone; private Stri

java框架篇---hibernate主键生成策略

Hibernate主键生成策略 1.自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识 使用SQL Server 和 MySQL 的自增字段,这个方法不能放到 Oracle 中,Oracle 不支持自增字段,要设定sequence(MySQL 和 SQL Server 中很常用) 数据库中的语法如下: MySQL:create table t_user(id int auto_increment

Hibernate(4)——主键生成策略、CRUD 基础API区别的总结 和 注解的使用

俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: hibernate的主键生成策略 UUID 配置的补充:hbm2ddl.auto属性用法 注解还是配置文件 hibernate注解的基本用法 使用Session API CRUD操作对象,以及对象状态的转换 hibernate缓存的概念 get()/load()的区别到底是什么,源码分析 代理模式实现的懒加载 saveOrUpdate()/merge()的区别 Assigned(常用,一般情况使用很方便):

hibernate之主键生成策略

一.主键类型1.自然主键(主键本身就是表中的一个字段,实体中一个具体的属性)表中已经具有某字段,并且该字段具有业务含义作为主键,称之为自然主键. 例如:在person表中的身份证号,既是唯一的,又可以单独标识一个person 2.代理主键(主键不是实体中某个具体的属性,而是一个不相关的字段)表中原本不存在的字段,且不具备业务含义的字段作为主键,称之为代理主键.更合理的方式是使用代理主键. 二.主键生成策略主键生成策略,就是每条记录录入时,主键的生成规则.Hibernate中,提供了几个内置的主键