03-Hibernate对象中的状态

03-Hibernate对象中的状态

  • hibernate中的实体规则

    实体类创建的注意事项:

    1. 持久化类提供无参的构造方法

    2. 成员变量私有,提供共有的get、set方法访问,需要提供属性

    3. 持久化类中的属性,应尽量使用包装类型

    4. 持久化类需要提供oid与数据库中的主键列对应

    5. 不要用final修饰class

      hibernate使用cglib代理生成对象,代理对象是继承被代理对象。如果被final修饰,将无法生成代理对象

  • 主键类型

    自然主键(少见)

    表的业务列中,有某业务列符合,必须有,并且不重复的特征时,该类可以叫做自然主键。

  • 代理主键(常见)

    表的业务列中,没有某业务列符合,必须有,并且不重复的特征时,创建一个没有业务意义列的作为代理主键。

  • hibernate中的对象状态

    对象分为3中状态

    1. 瞬时状态

      没有id,没有与session关联

    2. 持久化状态

      有id,与session有关联

    3. 游离|托管状态

      有id,没有与session关联
      在这里插入图片描述

    public class Demo {
    	@Test
    	//查看三种状态
    	public void fun1(){
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		
    		Customer c = new Customer();//没有ID,没有与session绑定==>瞬时状态
    		c.setCust_name("黑狼");//瞬时状态
    		session.save(c);//持久化状态,有id,有关联
    		
    		tx.commit();
    		session.close();//游离状态|托管状态,有id,没有关联
    	}
    	
    	
    	@Test
    	//三种状态的特点
    	//save方法: 其实不能理解为保存,理解成瞬时状态幻化成持久状态
    	//主键自增:执行save方法时,为了将对象转换为持久化状态,必须生成id值,所以需要执行insert语句
    	//increment: 执行save方法,为了生成id,会执行查询id最大值得sql语句
    	public void fun2(){
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		
    		Customer c = new Customer();//没有ID,没有与session绑定==>瞬时状态
    		c.setCust_name("黑狼");//瞬时状态
    		session.save(c);//持久化状态,有id,有关联
    		
    		tx.commit();
    		session.close();//游离状态|托管状态,有id,没有关联
    	}
    	
    	
    	@Test
    	//三种状态特点
    	//持久化状态特点: 持久化状态对象的任何变化都会同步到数据库中
    	public void fun3(){
    		Session session = HibernateUtils.openSession();
    		Transaction tx = session.beginTransaction();
    		
    		Customer c = session.get(Customer.class, 1l);
    		c.setCust_name("清子公司");
    		
    		tx.commit();
    		session.close();//游离状态|托管状态,有id,没有关联
    	}
    	
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值