Java 澄清声明
我有以下java中的SQL事务Java 澄清声明,java,try-catch,sqlexception,throws,Java,Try Catch,Sqlexception,Throws,我有以下java中的SQL事务 public List<MyObj> find() { Session session = sessionFactory.openSession(); Transaction tx = null; List<MyObj> obj = null; try { tx = session.beginTransaction(); Stri
public List<MyObj> find() {
Session session = sessionFactory.openSession();
Transaction tx = null;
List<MyObj> obj = null;
try {
tx = session.beginTransaction();
String sql = " some sql query";
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(MyObj.class);
objs = query.list();
tx.commit();
}
catch(Exception e) {
if (tx != null) tx.rollback();
}
finally {
session.close();
}
return objs;
}
公共列表查找(){
Session Session=sessionFactory.openSession();
事务tx=null;
列表obj=null;
试一试{
tx=session.beginTransaction();
String sql=“一些sql查询”;
SQLQuery=session.createSQLQuery(sql);
加法查询(MyObj.class);
objs=query.list();
tx.commit();
}
捕获(例外e){
如果(tx!=null)tx.rollback();
}
最后{
session.close();
}
返回对象;
}
我应该捕获SQLException而不是异常吗?当我将类更改为SQL Exception时,我得到一个错误,我应该添加一个throws子句,然后删除catch子句
我可以添加一个throws声明并仍然捕获和处理SQLException吗?在这种情况下,回滚?Hibernate API不会抛出
SQLException
(这是一个选中的异常
),因此您无法捕获它
好的做法是捕获运行时异常
(处理由于空引用等代码问题或Hibernate API引发的异常而发生的异常)和回滚事务,您可以查看Hibernate文档以获取事务回滚的示例
try {
tx = session.beginTransaction();
String sql = " some sql query";
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(MyObj.class);
objs = query.list();
tx.commit();
}
catch(RuntimeException e) {
if (tx != null) tx.rollback();
throw e;
}
finally {
session.close();
}
我认为错误的意思是我应该首先声明一个 子句,指示代码块将抛出SQLEXception 对吗 否,因为Hibernate已经将选中的
SQLException
包装到一个未选中的异常对象中(下面给出的列表),所以您不需要捕获该异常,也不需要在方法签名上抛出子句
我强烈建议您阅读关于为什么Hibernate或Spring框架已从已检查异常中移出的链接(如SQLException
,等等)
是否有文档表明SQLexception不是由
HibernateAPI
您可以查找Hibernate异常列表。编译器的确切错误是什么?SQLException的不可访问捕获块。这个异常永远不会从try语句bodyHibernate中抛出,它将异常包装在HibernateException中,因此您可以捕获它。RuntimeException也可以工作,但是您捕获的不仅仅是HibernateeException。最好是具体的。catch(Exception…
是一种反模式,就像抛出异常一样。总是处理更具体的异常。我认为错误的意思是,我应该首先声明一个throws子句,指示代码块将抛出一个SQLEXception正确吗?有没有一个文档说SQLexception不是由HibernateAPI引发的?更新了答案,有一个look@user_mda“有没有一个文档说SQLexception不是由hibernate[sic]API引发的?”是的,hibernate Javadocs。你调查过了吗?