hibernate的其他知识

本文深入探讨Hibernate框架中session的get与load方法的区别、update方法的使用技巧、saveOrUpdate方法的应用场景及delete方法的注意事项。同时介绍了如何通过配置实现SQL语句的格式化输出与懒加载等高级特性。
  <!-- 使用的数据库方言 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Echo all executed SQL to stdout -->
        <!-- 是否打印到控制台 -->
        <property name="hibernate.show_sql">true</property>

      	<!--  使SQL语句格式化
		<property name="format_sql">true</property>
		生成表时的方式
		<property name="hbm2ddl.auto">update</property>
		设置hibernate的事物隔离级别
		<property name="connection.isolation">2</property>	
		--> 	
session的 get和load方法的区别:
1.执行get方法:会立即加载对象。
执行load方法:若不使用该对象,则不会立即执行查询操作。而返回一个代理对象
get是立即检索,load是延迟检索
2.若数据表中没有对应的记录,
get返回null;load 若不使用该对象的任何属性没问题;若需要初始化了,则抛出异常
3.在需要初始化代理对象之前已经关闭了Session

load方法可能会抛出LazyInitializationException异常:懒加载

update方法:
1.若更新一个持久化对象,不需要显式的调用update方法。因为在调用Transaction
的commit()方法时,会限制session的flush方法。
2.更新一个游离对象,需要显式的调用session的update方法。可以把一个游离对象变为持久化对象
需要注意的是:
1.无论要更新的游离对象和数据表的记录是否一致,都会发送UPDATE语句。
如何能让UPDATE方法不在盲目的去发update语句呢?在.hbm.xml文件的class节点设置
select-before-update=true(默认为false)。但通常不需要设置该属性。
2.若数据表中没有对应的记录,但还是调用了update方法,会抛出异常。
3.当update()方法关联一个游离对象时,如果在session的缓存中已经存在相同的OID的持久化对象,会抛出异常。
因为在session缓存中不能有两个OID相同的对象。

SaveorUpdate:
1.若OID不为null,但数据表中还没有和其对应的记录,会抛出一个异常
2.OID值等于id的unsaved-value属性值的对象,也被认为是一个游离对象

delete:
执行删除操作。只要OID和数据表中一条记录对应,就会准备执行delete操作
若OID在数据表中没有对应的记录,则抛出异常

可以通过设置hibernate配置文件hibernate.use_identifier_rollback为true,
使删除对象后,把其OID置为null

evict:从session缓存中把指定的持久化对象移除

存放图片到数据库
InputStream stream=new FileInputStream("文件名.jpg");
Bolb image =Hibernate.getLobCreator(session).createBlob(stream,stream.available());
news.setImage(image);
session.save(news);
取图片
News news=(News)session.get(News.class,1);
Blob image=news.getImage();
InputStream in =image.getBinaryStream();

System.out.println(in.available());//图片大小

set:中的三个属性:
inverse:指定由哪一方来维护关联关系。通常设置为true,以指定由多的一端来维护关联关系
cascade:设定级联操作,开发时不建议设定该属性。建议使用手动的方式来处理

order-by:在查询时对集合中的元素进行排序,order-by中使用的是表的字段名,而不是持久化类的属性名。



【SCI一区复现】基于配电网韧性提升的应急移动电源预配置和动态调度(下)—MPS动态调度(Matlab代码实现)内容概要:本文档围绕“基于配电网韧性提升的应急移动电源预配置和动态调度”主题,重点介绍MPS(Mobile Power Sources)动态调度的Matlab代码实现,是SCI一区论文复现的技术资料。内容涵盖在灾害或故障等极端场景下,如何通过优化算法对应急移动电源进行科学调度,以提升配电网在突发事件中的恢复能力与供电可靠性。文档强调采用先进的智能优化算法进行建模求解,并结合IEEE标准测试系统(如IEEE33节点)进行仿真验证,具有较强的学术沿性和工程应用价值。; 适合人群:具备电力系统基础知识和Matlab编程能力,从事电力系统优化、配电网韧性、应急电源调度等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于复现高水平期刊(SCI一区、IEEE顶刊)中关于配电网韧性与移动电源调度的研究成果;②支撑科研项目中的模型构建与算法开发,提升配电网在故障后的快速恢复能力;③为电力系统应急调度策略提供仿真工具与技术参考。; 阅读建议:建议结合篇“MPS预配置”内容系统学习,重点关注动态调度模型的数学建模、目标函数设计与Matlab代码实现细节,建议配合YALMIP等优化工具包进行仿真实验,并参考文中提供的网盘资源获取完整代码与数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值