美文网首页
POJO状态

POJO状态

作者: 神豪VS勇士赢 | 来源:发表于2018-08-21 19:59 被阅读26次

POJO状态
Plain Ordinary Java Object简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。

三种状态:

1.1. 瞬时态
创建POJO (new POJO), 对象还没有与数据库发生关系,OID没有值(主键没有值),没有被Session管理。

1.2. 持久层态
有OID(有主键),被 session管理
Session托管 (session.save();session.load()),建立session时与数据库数据有对应关系,OID有值。发送SQL先生成主键,提交事务才入库。

1.3. 游离态
有OID,不被session管理
Session关闭 (session.close()),OID有值,脱离session。

案例:
public class TypeDAO {

public void addType(){
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
BookTypeEntity bookTypeEntity = new BookTypeEntity();
bookTypeEntity.setTypeName("放下");
bookTypeEntity.setTypeDesc("外在的放下与内心的放下");//这个POJO对象此时就是 2.1.瞬时态

  session.save(bookTypeEntity);//这个时候,这个对象就是 持久态
  System.out.println(bookTypeEntity.getTypeId());//oid有值

  transaction.commit();
  session.close();

  System.out.println(bookTypeEntity.getTypeId());//这个时候,这个对象就是 游离态

}

public static void main(String[] args) {
TypeDAO typeDAO = new TypeDAO();
typeDAO.addType();
}

}

Hibernate特点:添加后可以立即得到主键。

注意点:修改记录后不调用更新方法update,但提交事务会自动更新数据库,不需手动调用update。即刷新一级缓存,自动执行update语句,将一级缓存的数据更新到数据库。

观察现象:快照机制(保证数据一致性)

public void updateType(){
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
BookTypeEntity bookTypeEntity = session.get(BookTypeEntity.class, 31L);
bookTypeEntity.setTypeName("真的放下");
// session.update(bookTypeEntity);//不调用更新也可以更新内容
transaction.commit();//提交事务后会对比
session.close();
}

下面的情况不可以:(提交事务也没有更新)

public void update1(){
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
//添加分类
BookType bookType = new BookType();
bookType.setTypeId(39L);
bookType.setTypeName("不跑路");
bookType.setTypeDesc("努力开发");
// session.update(bookType);
transaction.commit();
session.close();
}

这种情况的对象没有被session管理,不属于持久化的状态中,不在一级缓存中。
添加也是类似的情况:

public void add1() {
Session session = HibernateUtils.openSession();
// Transaction transaction = session.beginTransaction();
//添加分类
BookType bookType = new BookType();
bookType.setTypeName("不跑路");
bookType.setTypeDesc("努力开发");
session.save(bookType);
System.out.println(bookType.getTypeId());
// transaction.commit();
session.close();
}

使用 session后没有提交事务也入库了。(此时数据在一级缓存)

相关文章

  • POJO状态

    POJO状态Plain Ordinary Java Object简单的Java对象,实际就是普通JavaBeans...

  • 04-Json

    POJO POJO:AckDoc POJO:AckDocHeader POJO:DemoTestListPojo ...

  • hiberante3-day2

    一、hibernate持久化对象状态(一级缓存)持久化对象 Persistent Object = POJO +...

  • springboot中可能使用的工具类

    @NotNull,@NotBlank和 @NotEmpty使用时 pojo验证注解类 常量 状态码 消息类 -la...

  • 2020-03-03- java 分层设计对象模型--POJO(

    Java POJO What is POJO? POJO是 Plain old Java object的缩写,其创...

  • struts2的三种写法

    1.Action类就是一个POJO类 什么是POJO类,POJO(PlainOrdinaryJavaObject)...

  • pojo

    当业务很简单的时候,pojo可以当做PO DTO VO BO来看 POJO(plain old java obje...

  • POJO

    POJO(Plain Ordinary Java Object)意思是普通的java对象 ,没有继承任何类、实现任...

  • POJO

    POJO全称Plain Ordinary Java Object,表示简单的Java对象,是DO/DTO/BO/V...

  • JavaSe知识细节

    简介 POJO与JavaBean 简而言之,POJO集合包含JavaBean。当一个Pojo符合特定的约定,他就是...

网友评论

      本文标题:POJO状态

      本文链接:https://www.haomeiwen.com/subject/rmejiftx.html