MyEclipse有一个Hibernate的插件,用它可以快速地生成与Hibernate操作有关的代码,十分方便。初学Hibernate时,调
用着这些自动生成的代码,看着数据库中一行行操作成功的数据,喜悦之情溢于言表。
但是,今天,当我将hibernate用于项目,在Servlet环境下调用时,我需要的ServletExcpetion竟然无从产生。难道当数据
库操作失败时,Servlet容器就放过这个错吗?显然不能。然而看看自己的代码,我找不到一处强制抛出错误的地方(Eclipse会
在强制处理Exception的地方提示你)。再看看Hibernate自动生成的DAO类,果然没有一个方法抛出异常:
- public void save(Employee transientInstance) {
- log.debug("saving Employee instance");
- try {
- getSession().save(transientInstance);
- log.debug("save successful");
- } catch (RuntimeException re) {
- log.error("save failed", re);
- throw re;
- }
- }
-
- public void delete(Employee persistentInstance) {
- log.debug("deleting Employee instance");
- try {
- getSession().delete(persistentInstance);
- log.debug("delete successful");
- } catch (RuntimeException re) {
- log.error("delete failed", re);
- throw re;
- }
- }
-
- public Employee findById(java.lang.String id) {
- log.debug("getting Employee instance with id: " + id);
- try {
- Employee instance = (Employee) getSession().get(
- "apqp.hbm.admin.employee.Employee", id);
- return instance;
- } catch (RuntimeException re) {
- log.error("get failed", re);
- throw re;
- }
- }
-
- ///......省去其他方法
这些方法在内部处理的是RuntimeException。可是save()等一些数据库操作方法应该是会抛出异常的啊,按照Hibernate API,
这些方法都会抛出HibernateException。但是(看看,多曲折啊),当我在API中将HibernateException找到时,发现它竟然是
RuntimeException的子类,难怪抓不住它的!
现在我搞清楚了,操作hibernate时,该抛出异常的地方你得自己抓异常,比如:
- DepartmentDAO dao = new DepartmentDAO();
-
- Transaction t = dao.getSession().beginTransaction();
-
- dao.save(new Department("采购部"));
-
- t.commit();
-
- dao.getSession().close();
这里不写异常也能运行,但是不符合业务逻辑的需要。因此,在可能出现异常的地方,要catch HibernateExcpetion。可是,那
些地方时可能出现异常的地方呢?参照了一些高手的代码,综合了一下他们的特点,我决定:
- DepartmentDAO dao = new DepartmentDAO();
-
- Transaction t = null;
-
- try {
-
- t = dao.getSession().beginTransaction();
-
- dao.save(new Department("采供部"));
-
- t.commit();
-
- dao.getSession().close();
-
- } catch (HibernateException e) {
-
- if (t!=null) {
- t.rollback();
- }
- } finally {
- dao.getSession().close();
- }
这样,我就抓到HibernateExcpetion了。
分享到:
相关推荐
在 Java web 开发中, Hibernate 是一个非常流行的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在使用 Hibernate 进行数据库操作时,经常会遇到 "No Hibernate Session ...
问题描述 用SpringBoot + Spring Data JPA操作数据库 项目启动的时候 报了一个错 SpringBoot的版本是2.2.6.RELEASE org.springframework.beans.factory.BeanCreationException: Error creating bean with name '...
这涉及到ORM(对象关系映射)的概念与Hibernate的具体操作方法。 ### 基于名称查询Admin 在描述中提到的问题之一是如何通过Admin的名字查询一个Admin实例。解决这一问题的关键在于构造正确的HQL(Hibernate Query ...
public void addUser(TUser user) throws HibernateException { Transaction tx = null; TUserDAO dao = new TUserDAO(); try { tx = dao.getSession().beginTransaction(); // 开始事务 dao.save(user); // ...
首先,从 org.hibernate.cfg.Configuration.java 开始,使用 Hibernate 框架实现应用程序,首先就要与 org.hibernate.cfg.Configuration 打交道,要使用 Configuration.buildSessionFactory() 方法获得一个 ...
6.8 HibernateException,Checked 6.9 Template/Callback 简化业务方法 6.10 版面:一棵自身循环的树 6.11 版面与帖子:Master/Detail 主从关系 6.12 帖子树及其分页 6.13 与Web层交互 6.14 帖子的多形扩展:...
6.8 HibernateException,Checked 6.9 Template/Callback 简化业务方法 6.10 版面:一棵自身循环的树 6.11 版面与帖子:Master/Detail 主从关系 6.12 帖子树及其分页 6.13 与Web层交互 6.14 帖子的多形扩展:...
Hibernate 源代码分析 (一):设计属于我的 SessionFactory 和 ConnectionProvider 在这篇文章中,我们将探讨 Hibernate 框架的源代码,了解 SessionFactory 和 ConnectionProvider 的实现机制。首先,我们需要了解 ...
当涉及到数据修改时,需引入事务管理,确保数据一致性: ```csharp Configuration cfg = new Configuration().Configure(); ISessionFactory factory = cfg.BuildSessionFactory(); using(ISession session = ...
接着,你需要下载并准备Hibernate所需的JAR文件,这些文件包含了Hibernate的核心库和其他依赖,如JDBC驱动,以便连接到数据库。在这个例子中,我们将使用MySQL数据库,因此还需要安装MySQL并创建对应的数据库和表。 ...
这是因为只进结果集是为了提高性能而设计的,它允许数据只能向前读取,不能回溯或重复访问,因此不支持随机访问特性,如跳转到结果集中的任意位置。 ### Hibernate与Struts分页机制 在使用Hibernate和Struts框架...
这样做可以减少不必要的数据库访问,提高性能。 - **如何在控制台显示SQL语句?** - 在配置文件hibernate.cfg.xml中,添加`<property name="show_sql">true</property>`即可。 通过以上的讲解,我们不仅了解了...
要使用Hibernate,首先需要将其库文件添加到项目类路径中,然后配置hibernate.cfg.xml文件,包括数据库连接信息、方言选择、缓存设置等。同时,也需要在应用中初始化SessionFactory。 3. 实体与映射 Hibernate的...
import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.cfg.Configuration; /** * Configures and provides access to Hibernate sessions, tied to the * current ...
public Object doInHibernate(Session session) throws HibernateException, SQLException { return session.createQuery(hql).executeUpdate(); } }); ``` 3. **HQL单表查询**: 单表查询可以从一个表中获取...
} catch (HibernateException e) { if (tx != null) tx.rollback(); e.printStackTrace(); } finally { session.close(); } } } ``` #### 四、常见问题解答 **问题1**: 如果将`user.hbm.xml`中的`cascade`...
标题:“Hibernate的事务与并发控制” 描述:本文深入解析了Hibernate框架中事务管理和并发控制的核心概念及其实现机制,基于一份详尽的“hibernate详细解析.pdf”文档,覆盖了非托管环境、JTA环境下的事务处理以及...
import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.Transaction; public class HibernateTest extends TestCase { public void testSaveAndLoad() { Session ...