gpt4 book ai didi

spring - 通用 DAO hibernate 4 + spring 4 和异常处理

转载 作者:行者123 更新时间:2023-12-03 12:33:14 26 4
gpt4 key购买 nike

我最近在做一个spring mvc项目,我是hibernate和spring的新手。

问题是,我想避免自己一遍又一遍地复制代码,至少让自己免于杂乱无章的操作。所以一个关于如何制作通用接口(interface)然后实现的例子真的很有帮助。

我先搜索了互联网,我发现了一些关于使用 SessionFactory 的建议(感谢 spring,我已经有了 bean),以及关于使用事务管理器的建议(虽然我不知道如何使用,但我想添加一些 @Transactional 注释)

而且,一个非常重要的事情,我想知道我应该处理哪些异常?

最佳答案

通常,您通过制作一个通用的 DAO 接口(interface)(可以称为 CRUD 存储库)并使其成为通用的。示例(请注意,这不是那么冗长,仅供引用):

public interface GenericDAO<T, ID extends Serializable> {
T save(T entity);
void delete(T entity);
}

示例实现:
    public class GenericHibernateDAO<T, ID extends Serializable>
implements GenericDAO<T, ID> {
private Class<T> persistentClass;

public GenericHibernateDAO() {
this.persistentClass = (Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}

private SessionFactory sessionFactory;

public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}

public Session getSession()
{
return sessionFactory.getCurrentSession();
}

@Override
public T save(T entity)
{
getSession().save(entity);
return entity;
}
@Override
public void delete(T entity) {
getSession().delete(entity);
}
}

也可以引用其他 similar所以问题。

对于异常处理,您可以使用 @ControllerAdvice 在单个 Controller 级别或单点处理业务异常或任何异常。 .
例如:
@ControllerAdvice
public class GlobalDefaultExceptionHandler {

@ExceptionHandler(Exception.class)
public String exception(Exception e) {

return "error";
}
}

Here是一个很好的博客,它涉及使用 @ExceptionHandler 在单个 Controller 级别进行异常处理并在全局范围内使用 @ControllerAdvice以及 @ExceptionHandler
- - - - - - - - - - - - - - - - - 更新 - - - - - - - - ---------------------

Hibernate 抛出一个名为 HibernateException 的运行时异常.
想想 @Transactional作为您的 BEGIN TRANSACTION COMMIT ROLLBACK数据库中的模型,即如果您在事务中执行任何操作并且在此期间发生任何错误,您应该回滚整个事务。因此,通常我们将这种代码/注释 ( @Transactional) 放在服务层中,您可以在其中组合几个 dao 方法并将它们放在一个事务中,使它们成为一个工作单元。

使用它的语法是:
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)

这意味着如果发生任何异常(请注意,我已明确提到 Exception.class 您可以增加范围并使其成为 Throwable.class )spring 将为您回滚任何更新/插入/删除的数据。如果你想了解 Propagation请引用 this .

关于spring - 通用 DAO hibernate 4 + spring 4 和异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25476884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com