见下列代码,希各位解答.正困扰中...
[code="java"]
Session s = HibernateUtil.getCurrentSession();
s.clear();
Transaction t = s.beginTransaction();
try{
s.update(o);
s.update(o1);
s.delete(o2);
t.commit();
}
catch(Exception e) {
//当捕捉到异常时,能否知道是o,o1还是o2时失败?
t.rollback();
e.printStackTrace();
} finally {
s.clear();
HibernateUtil.closeSession();
}
[/code]
[code="java"]
session = sessionFactory.openSession(new EmptyInterceptor() {
public boolean onSave(Object entity, Serializable id,
Object[] state, String[] propertyNames, Type[] types) {
// TODO Auto-generated method stub
if (entity instanceof UserInfo) {
System.out.println("准备添加用户:"
+ ((UserInfo) entity).getName());
}
return false;
}
@Override
public void onDelete(Object entity, Serializable id,
Object[] state, String[] propertyNames, Type[] types) {
// TODO Auto-generated method stub
if (entity instanceof UserInfo) {
System.out.println("准备删除用户:"
+ ((UserInfo) entity).getName());
}
super.onDelete(entity, id, state, propertyNames, types);
}
@Override
public boolean onFlushDirty(Object entity, Serializable id,
Object[] currentState, Object[] previousState,
String[] propertyNames, Type[] types) {
// TODO Auto-generated method stub
if (entity instanceof UserInfo) {
System.out.println("准备更新用户:"
+ ((UserInfo) entity).getName());
}
return super.onFlushDirty(entity, id, currentState,
previousState, propertyNames, types);
}
});
[/code]
hibernate里的Interceptor应该可以满足你的需求。
在你的interceptor里,用个list保存那三个对象(要更新或删除的对象,并且顺序固定);
在onupdate 或者ondelete方法里分别删除操作的对象。
到该方法执行完后,检查这个list里的对象。
只要知道第一个对象,就知道是前一个对象在操作时发生异常了。
我不确定hibernate会不会调整delete 和 update执行的顺序。因为hibernate很多东西看的还不是很清楚。没spring来的爽快。