Hibernate中的异常有哪些?如何处理?代码举例讲解

在Hibernate中,常见的异常主要有:

  1. HibernateException:Hibernate的通用异常,是其他所有Hibernate异常的父类。
  2. QueryException:查询相关异常,如SQL语法错误等。例如:
try {
    Query query = session.createQuery("from Account a where a.name = ?");
    query.list();
} catch (QueryException e) {
    e.printStackTrace();
}
  1. ConstraintViolationException:违反数据库约束异常,如主键重复等。例如:
try {
    Account account = new Account();
    account.setId(1);        // 主键重复
    session.save(account);
} catch (ConstraintViolationException e) {
    e.printStackTrace();
} 
  1. LockAcquisitionException:获取数据库锁异常。例如:
try {
    Account account = (Account) session.get(Account.class, 1, LockMode.UPGRADE);
} catch (LockAcquisitionException e) {
    e.printStackTrace();
}
  1. NonUniqueResultException:查询返回多个结果而事先期望只有一个的异常。例如:
try {
    Account account = (Account) session.createQuery("from Account").uniqueResult(); 
} catch (NonUniqueResultException e) {
    e.printStackTrace();
}  
  1. TransientObjectException:操作瞬时对象异常,如对象尚未与会话关联等。例如:
Account account = new Account();   // 瞬时对象
try {
    session.delete(account);     
} catch (TransientObjectException e) {
    e.printStackTrace();
}

我们可以通过try-catch语句捕捉这些异常,并在catch块中进行相应处理,避免程序异常退出。