hibernate对象状态 的小问题

Class classA{
    List a;

    public void setA(List a)
     {
      this.a =a;
     }
      public List getA()
     {
      return this.a;
     }

}
....
classA t;//处于hibernate管理状态下面

List b=new ArraryList<>();
b.add(new Object());

/**
成功
*/
t.getA().add(b);//maybe addAll(b)
//如果使用t.a=b;则会失败
session.update(t)

分析原因:

t.a=b 改变了t的引用地址,重新指向的这个地址,对象不在hibernate的管理状态中。

t.getA().add(b);没改变引用,只是修改了引用内部的值
时间: 2024-08-02 17:09:24

hibernate对象状态 的小问题的相关文章

Hibernate对象状态

对象状态 瞬时(transient) 自己new出来的对象,数据库没有记录与之对应,与session也没有关联 持久(persistent) 数据库中有记录与之对应,当前与session有关联,相关的session未关闭,事务未提交 持久对象如果发生改变,Hibernate能够检测到,事务提交的时候会将改变后的数据提交给数据库 脱管(detached,也有翻译成游离) 数据库有记录与之对应,但没有与session关联,托管对象的改变Hibernate无法检测到 使用场景 对瞬时对象进行保存报错

hibernate 对象状态和关系操作

临时状态: new() 持久化状态: 临时状态-->持久化状态  save(),saveorupdate(); get() load() querylist() queryuniqueResult() queryiterator() 游离状态--〉持久化状态  update(),saveorupdate(),lock() 游离状态 持久化状态--〉游离状态evict() close() clear() 删除状态 delete()

ORM进阶:Hibernate对象的三大状态

简介 Hibernate负责将实体模型,关联到关系模型.那么在程序运行过程中,如何保证实体对象与数据库中的一致性呢? 首先要了解一下Hibernate对象中的三种状态: 三种状态 临时状态(Transient) 持久状态(Persistent) 游离状态(Detached) 状态的含义 临时状态 在程序中第一次使用该对象.(既然是第一次使用实体对象,那么当然数据库中是没有该记录的) 即:实体模型中存在,但是不被Session管理,数据库中没有该记录. 持久状态 当临时状态的对象,执行save()

hibernate框架学习之对象状态

Hibernate对象共有三种状态 瞬时状态:瞬时对象 持久化状态:持久化对象 托管状态:托管对象 瞬时对象(Transient Object),简称TO 瞬时对象指的是应用程序创建出来的对象,并且未受到Hibernate控制,一旦Hibernate控制了该对象,具有了OID,对象就不再是瞬时对象 持久化对象(Persistent Object),简称PO 持久化对象指的是受Hibernate控制的对象,无论该对象是如何得到的,只要受到Hibernate控制,该对象即为持久化对象.如果Hiber

Hibernate对象

Hibernate对象 Hibernate是java (对象关系映射)ORM管理框架: Hibernate对象就是O--java实体:Hibernate通过对实体的管理在不同状态之间的转换来实现关系数据库的映射: Hibernate对象状态: 瞬时状态:Hibernate中没有和Session做关联的对象实例: 持久化状态:Hibernate中和session关联的对象实例: 游离状态:持久化实例的关联在session关闭之后转台变为了游离状态: 注:1,如何理解对象实例和Hibernate S

hibernate学习(5)——对象状态与一级缓存

1.对象状态 1.1   状态介绍 hibernate 规定三种状态:瞬时态.持久态.脱管态 瞬时态:transient,session没有缓存对象,数据库也没有对应记录.没有与hibernate关联,与数据库中的记录没有产生关联. OID特点:没有值 持久态:persistent,session缓存对象,数据库最终会有记录.(事务没有提交)与hibernate关联,对象有id OID特点:有值 脱管态:detached,session没有缓存对象,数据库有记录.没有与hibernate关联,对

Hibernate(3)——实例总结Hibernate对象的状态和ThreadLoacl封闭的session

俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: Hibernate的内部执行过程(CRUD) 对象的状态及其转换图和例子 使用JUnit测试 使用getCurrentSession代替openSession ThreadLoacl对象 享元模式 session.update(obj),为保证执行更新,推荐使用session.flush()刷新缓存; 1和2大概总结了Hibernate运行的技术原理,那么现在总结一下它自身的编写过程:如下: 其中本质上主要

Hibernate(四)之对象状态及一级缓存

一.Hibernate中的对象状态 1.1.瞬时态(临时态) 没有与Hibernate产生关联 与数据库中的记录没有产生关联(有关联就是与数据库中表的id相对应) 获得:一般都只直接创建(new) 瞬时态 转换 持久态 一般操作:save方法.saveOrUpdate 瞬时态 转换 脱管态 一般操作:通过setId方法设置数据 1.2.持久态 Hibernate有关联 对象有id 获得: 查询操作:get.loat.createQuery.createCriteria 等 获得都是持久态[] 执

hibernate对象三种状态

hibernate里对象有三种状态: 1,Transient 瞬时 :对象刚new出来,还没设id,设了其他值. 2,Persistent 持久:调用了save().saveOrUpdate(),就变成Persistent,有id 3,Detached  脱管 : 当session  close()完之后,变成Detached. 例子程序: Teacher类: 1 package com.oracle.hibernate.id; 2 3 import javax.persistence.Enti