hibernate 对象状态

session 的几个主要方法:
1,save方法和persist方法的区别;
2,delete,删除对象
3,update,更新对象,如果数据库中没有记录,会出现异常。
4,get,根据ID查,会立刻访问数据库。
5,load,根据ID查,(返回的是代理,不会立即访问数据库)
6,saveOrUpdate,merge(根据id和version的值来确定是save还是update),调用merge你的对象还是脱管的。
7,lock(把对象变成持久对象,但不会同步对象的状态)
8,flush 把缓存中的数据刷新到数据库。

Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象。
其区别在于:
1,如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException。
2,Load方法可返回实体的代理类实例,而get方法永远直接返回实体类。
3,load方法可以充分利用内部缓存和二级缓存中的现有数据,而get方法则仅仅在内部缓存中进行数据查找,如没有发现对应数据,将越过二级缓存,直接调用SQL完成数据库读取。


补充:load的懒加载的理解,见后面部分。

对于和ibernate而言,对象有三种状态:瞬时对象,持久对象,游离对象或脱管对象
1.瞬时(transient):数据库中没有数据与之对应,超过作用域会被jvm的垃圾收集器回收,一般是new出来且与session没有关联的对象
2.持久(persistent):数据库中有数据与之对应,当前session有关联,并且相关联的session没有关闭,事务没有提交;持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到 )。
3,脱管(detached):数据库中有数据与之对应,但当前没有session与之关联;脱管对象状态发生改变,hibernate不能检测到。



Java代码
1.Session session = HibernateUtil.getSession();
2. Transaction tx = session.beginTransaction();
3. session.save(user);
4. user.setUserName("new name");
5. tx.commit();
6. System.out.println("end");
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
session.save(user);
user.setUserName("new name");
tx.commit();
System.out.println("end");
上例中,在session.save(user)执行后,user就是持久对象(数据库中有记录了同时和session关联,接受hibernate的管理),所以下一句user修改自己的属性,它的动作被hibernate检测到,在事务提交时能够同步更新到数据库中去。在执行过程中,hibernate执行两个动作:

Hibernate: insert into user (userName, birthday, id) values (?, ?, ?)
Hibernate: update user set userName=?, birthday=? where id=?


既然如此,对象的更新能够自动被监测执行,那么session对象的update方法岂不是英雄无用武之地了?其实不然,当一个对象处于游离状态时,可以调用session的update方法,手动地把信息更新到数据库中去。

再者,有时候你接受传过来的一个对象,你有时候并不知道该对象是瞬时的还是脱管的,那么该怎么办呢?这是就可以调用session对象的saveOrUpdate方法。hibernate内部可以根据对象的id的值来判断对象的状态,id无值则为瞬时对象,有值说明是脱管对象,从而执行相应的动作。调用了saveOrUpdate方法,对象的状态变为持久,而使用merge方法(功能和saveOrUpdate差不多),对象的状态变为脱管。
主要内容:本文详细介绍了一种QRBiLSTM(分位数回归双向长短期记忆网络)的时间序列区间预测方法。首先介绍了项目背景以及模型的优势,比如能够有效利用双向的信息,并对未来的趋势上限和下限做出估计。接着从数据生成出发讲述了具体的代码操作过程:数据预处理,搭建模型,进行训练,并最终可视化预测结果与计算分位数回归的边界线。提供的示例代码可以完全运行并且包含了数据生成环节,便于新手快速上手,深入学习。此外还指出了模型未来发展的方向,例如加入额外的输入特性和改善超参数配置等途径提高模型的表现。文中强调了时间序列的标准化和平稳检验,在样本划分阶段需要按时间序列顺序进行划分,并在训练阶段采取合适的手段预防过度拟合发生。 适合人群:对于希望学习和应用双向长短时记忆网络解决时序数据预测的初学者和具有一定基础的研究人员。尤其适用于有金融数据分析需求、需要做多一步或多步预测任务的从业者。 使用场景及目标:应用于金融市场波动预报、天气状况变化预测或是物流管理等多个领域内的决策支持。主要目的在于不仅能够提供精确的数值预计还能描绘出相应的区间概率图以增强结论置信程度。 补充说明:本教程通过一个由正弦信号加白噪构造而成的简单实例来指导大家理解和执行QRBiLSTM流程的所有关键步骤,这既方便于初学者跟踪学习,又有利于专业人士作为现有系统的补充参考工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值