0

我有一个工作的 spring-hibernate 项目,我决定将这个项目的一部分转移到一个新的项目中,以拥有类似于基础项目的东西。这个新的基础项目包含一些用于休眠的 dao 类和大量的 spring 注释。所以我成功地创建了它并将它发布到我的存储库。之后,我将它添加到我的第一个项目中。我还添加了带有基本项目包的spring config。现在我有没有弹簧/休眠配置的基础项目。另一个依赖于基础的项目,另一个项目有 spring/hibernate 配置。

现在我收到很多运行时错误。1. 我在基础项目中的服务类无法从基础项目中的另一个包中自动装配 DAO 类。在我把它放在一个包裹里之后,问题就解决了。但我不太喜欢它。2. 我的 DAO 方法在运行时出现“没有绑定到线程的休眠会话,并且配置不允许在此处创建非事务性会话”。但以前,当我有一个项目时,他们工作得很好。

我需要基础项目中的弹簧配置吗?我怎样才能正确地做这些事情?

更新

现在春天事务管理器中的问题。在基础项目中,我有带有 dao 类的基础抽象控制器。在主类中,我有一个继承基控制器的控制器。当我在服务器上运行项目时,当基本 dao 调用 sessionFactory.getCurrentSession() 时,我收到“没有绑定到线程的休眠会话”。但在我拆分这个项目之前,一切都很好。如果我从 junit 运行 Dao 方法,它们也可以正常工作。

Slove 问题是在“context:component-scan”中添加了一些包。它给出了这种效果。谢谢你们的回复。

4

2 回答 2

0

如果您在主项目(不是基础项目)中为您的 dao/services 使用 @Service 或 @Component 注释,则需要在 spring 上下文 xml 中指定扫描包。这应该有效。

使用休眠实体映射也可以完成同样的事情。在主项目中,使用 Spring LocalSessionFactoryBean 设置休眠实体扫描来自基础项目的包。这也应该对你有用,因为它对我有用。

于 2012-06-08T12:02:31.103 回答
0

Spring 配置文件可以在类路径中的任何地方(基础项目,主项目......)。您只需要将它们添加到 Web.xml 文件中的上下文中:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:/applicationContext-context1.xml         
        classpath:/applicationContext-context2.xml
        classpath:/applicationContext-context3.xml
        /WEB-INF/applicationContext-context4.xml 
    </param-value>
</context-param>

我认为最好将它们全部放在你的主应用程序中(而不是在基础库中),就像你现在所做的那样。

于 2012-06-08T12:02:49.317 回答