欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-11-13 21:03:01
一 持久化类的一个编写规则持久化:将内存中的一个对象持久化到数据库中的过程持久化类:一个Java对象与数据库的表建立了映射关系,那么这个类在hibernate中称为持久化类可以这么理解:持久化类=Java类+映射文件 持久化类的编写规则1 对持久化类提供一个无参的构造方法2 属性需要私有,对私有属性 ......

一 持久化类的一个编写规则
持久化:将内存中的一个对象持久化到数据库中的过程
持久化类:一个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被销毁了
    }
}

 


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

明天会继续更新!