hibernate的其他知识

本文深入探讨Hibernate框架中session的get与load方法的区别、update方法的使用技巧、saveOrUpdate方法的应用场景及delete方法的注意事项。同时介绍了如何通过配置实现SQL语句的格式化输出与懒加载等高级特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  <!-- 使用的数据库方言 -->
        <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中使用的是表的字段名,而不是持久化类的属性名。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值