在Hibernate中如何修改一个记录中的某个字段

在Hibernate中如何修改一个记录中的某个字段,第1张

步骤:
看你表对应的是哪个类,定义一个该类的引用(在下面的代码说明上假设为temp)。
通过hibernate
session得到需要修改的持久态的对象并使上面定义的引用指向该对象。。
修改数据。
更新数据。
Session
s
=
getSessionFactory()openSession();
tx=sessionbeginTransaction();
temp=sget(id);
tempsetUser(YourNewUser);
supdate(temp);
txcommit();
sclose();

Hibernate的事件监听机制
Hibernate中的事件监听机制可以对Session对象的动作进行监听,一旦发生了特殊的事件,Hibernate就会执行监听器中的事件处理方法
在某些功能的设计中,我们即可以使用Hibernate的拦截器实现,也可以使用Hibernate的事件监听来实现
Hibernate中事件与对应的监听器接口
orghibernateevent EventListeners
事件类型 监听器接口
auto-flush---- -------------AutoFlushEventListener
merge----------------------MergeEventListener
create----------------------PersistEventListener
delete----------------------DeleteEventListener
dirty-check----------------DirtyCheckEventListener
evict------------------------EvictEventListener
flush------------------------FlushEventListener
flush-entity----------------FlushEntityEventListener
load-------------------------LoadEventListener
load-collection-------------InitializeCollectionEventListener
lock--------------------------LockEventListener
refresh----------------------RefreshEventListener
replicate--------------------ReplicateEventListener
save-update---------------SaveOrUpdateEventListener
save------------------------SaveOrUpdateEventListener
update---------------------SaveOrUpdateEventListener
pre-load-------------------PreLoadEventListener
pre-update---------------PreUpdateEventListener
pre-delete----------------PreDeleteEventListener
pre-insert-----------------PreInsertEventListener
post-load-----------------PostLoadEventListener
post-update--------------PostUpdateEventListener
post-delete---------------PostDeleteEventListener
post-insert----------------PostInsertEventListener
post-commit-update-----PostUpdateEventListener
post-commit-delete------PostDeleteEventListener
post-commit-insert-------PostInsertEventListener
应用Hibernate事件监听器
用户制定的事件监听器首先需要实现与所需要处理的事件对应的接口,或者继承实现这个接口的类
通过使用Hibernate的配置文件(hibernatecfgxml)配置事件监听对象,或者使用Configuration对象注册这个定制的事件监听器对象
LogPostLoadEventListener
import orghibernateeventPostLoadEvent;
import orghibernateeventPostLoadEventListener;
public class LogPostLoadEventListener implements PostLoadEventListener {
private static final long serialVersionUID = 404241098418965422L;
public void onPostLoad(PostLoadEvent event) {
Systemoutprintln("Class:" + eventgetEntity()getClass()getName() + ",id:"
+ eventgetId());
}
}
修改Hibernatecfgxml文件
<mapping resource="com/rbh/examples/Guestbookhbmxml" />
<listener type="post-load" class="comrbhexamplesLogPostLoadEventListener" />
</session-factory>
</hibernate-configuration>
或者通过Configuration 对象注册这个监听器对象
Configuration config = new Configuration();
configsetListener("post-load", new LogPostLoadEventListener());
configconfigure();
Session session = configbuildSessionFactory()getCurrentSession();
编写、配置好监听器以后,当通过Session对象的load()、get()方法或者Query对象的list方法加载持久化对象之后,LogPostEventListener对象中的onPostLoad()方法就会被执行
使用监听器实现审计日志
利用Hibernate的事件机制,不仅能够精确追踪到持久化对象的字段的修改,持久化对象关联关系的变更,还能记录更新前的数值和更新后的数值
拦截器(Interceptor)
orghibernateInterceptor接口定义了Hibernate中通用拦截机制
创建Session对象的时候,所有的Session对象或者这个Session对象的所有持久化 *** 作的动作都会被指定的拦截器进行拦截
Interceptor接口的方法
afterTransactionBegin()
当一个事务时候启动时,会立刻调用这个方法,这个方法可以改变这个事务的状态,例如:回滚事务
instantiate()
创建对象,如果返回null,则Hibernate将调用实体类的默认构造方法创建持久化对象
getEntity()
当一个持久化对象,通过标示符属性在Session对象的缓存中进行查找,并且没有找到时,会调用该方法
getEntityName()
当session对象获取持久化对象的名字时,会调用这个方法
onLoad()
该方法在持久化对象初始化之前加载,这个的持久化对象处于刚被创建的状态(对象的属性值都未赋值)
findDirty()
当调用Session对象的flush()方法时,讲调用该方法判断对象是否为脏数据,这是脏数据检查的另外拦截的实现方式
isTransient()
当调用Session对象的saveOrUpdate方法时,会调用该方法判断对象是否尚未保存
onSave()
在对象被保存之前调用,通过这个方法可以对要保持的对象的属性进行修改
onDelete()
该方法在持久化对象被删除之前调用
preFlush()
该方法当调用Session对象的flush()方法之前被调用
onFlushDirty()
当调用Session对象flush()方法进行脏数据检查时,如果发现持久化对象的状态发生了改变,会调用该方法
postFlush()
该方法调用Session对象的flush()方法之后被调用
beforeTransactionCompletion()
在完成一个事务之前,调用此方法,这个方法可以改变事务的状态,例如回滚事务
afterTransactionCompletion()
当完成一个事务之后,立刻调用此方法


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12887119.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存