在Hibernate中,常见的异常主要有:
- HibernateException:Hibernate的通用异常,是其他所有Hibernate异常的父类。
- QueryException:查询相关异常,如SQL语法错误等。例如:
try {
Query query = session.createQuery("from Account a where a.name = ?");
query.list();
} catch (QueryException e) {
e.printStackTrace();
}
- ConstraintViolationException:违反数据库约束异常,如主键重复等。例如:
try {
Account account = new Account();
account.setId(1); // 主键重复
session.save(account);
} catch (ConstraintViolationException e) {
e.printStackTrace();
}
- LockAcquisitionException:获取数据库锁异常。例如:
try {
Account account = (Account) session.get(Account.class, 1, LockMode.UPGRADE);
} catch (LockAcquisitionException e) {
e.printStackTrace();
}
- NonUniqueResultException:查询返回多个结果而事先期望只有一个的异常。例如:
try {
Account account = (Account) session.createQuery("from Account").uniqueResult();
} catch (NonUniqueResultException e) {
e.printStackTrace();
}
- TransientObjectException:操作瞬时对象异常,如对象尚未与会话关联等。例如:
Account account = new Account(); // 瞬时对象
try {
session.delete(account);
} catch (TransientObjectException e) {
e.printStackTrace();
}
我们可以通过try-catch语句捕捉这些异常,并在catch块中进行相应处理,避免程序异常退出。