小编Dan*_*ann的帖子

在spring/resources.groovy中配置的服务没有Hibernate会话

我们有一个包含服务的插件的应用程序:

public class TaskService {

    public void doSomething( Task task ) {
        // do something with task
        task.save();
    }
}
Run Code Online (Sandbox Code Playgroud)

这很好用.


对于有特殊要求的"特殊"客户,我们有第二个应用程序,其中包含来自第一个应用程序的插件和另一个带有该客户特殊服务的插件,该服务扩展了原始服务并覆盖了一些方法:

public class SpecialTaskService extends TaskService{

    @Override
    public void doSomething( Task task ) {
        // do something special with task
        task.save();
    }
}
Run Code Online (Sandbox Code Playgroud)

在第二个应用程序中注入taskService的每个位置,我们现在想要使用SpecialTask​​Service(也在第一个应用程序的插件中).所以我们在grails-app/conf/spring下的resources.groovy中添加了特殊服务:

beans = {
        taskService( SpecialTaskService )
}
Run Code Online (Sandbox Code Playgroud)

但是现在我们在特殊服务中调用"task.save()"时会得到一个HibernateException:org.hibernate.HibernateException:没有Hibernate Session绑定到线程,并且配置不允许在这里创建非事务性的

我们知道我们可以将一个SessionFactory注入到SpecialService中,但是当我们调用sessionFactory.currentSession时,我们会得到相同的Exception.

当我们在resources.groovy中配置一个不扩展另一个服务的服务时,也会发生异常.

有没有办法让特殊服务成为某种"hibernateSessionAware",以便我们可以在域对象上调用save()和merge()?

grails

3
推荐指数
1
解决办法
1029
查看次数

标签 统计

grails ×1