Hibernate Spring Web容器错误

Hibernate Spring Web容器错误,spring,hibernate,configuration,Spring,Hibernate,Configuration,你好,我是冬眠新手 我已经用Hibernate工具生成了一个数据库访问模块。生成器生成DAOS和Hibernate bean的代码 当我在一个简单的Java应用程序中测试这个模块时,一切正常,但当我在SpringWeb应用程序中测试它时,我得到一个非常奇怪的错误。因为我的模块是一个独立的jar,所以它应该访问数据库,而不考虑在简单Java应用程序或Web应用程序中执行的情况。我的web应用程序的代码是: @Controller @RequestMapping("/") public

你好,我是冬眠新手

我已经用Hibernate工具生成了一个数据库访问模块。生成器生成DAOS和Hibernate bean的代码

当我在一个简单的Java应用程序中测试这个模块时,一切正常,但当我在SpringWeb应用程序中测试它时,我得到一个非常奇怪的错误。因为我的模块是一个独立的jar,所以它应该访问数据库,而不考虑在简单Java应用程序或Web应用程序中执行的情况。我的web应用程序的代码是:

  @Controller
  @RequestMapping("/")
  public class Controller implements ApplicationContextAware
  {


   private ApplicationContext applicationContext;


   @RequestMapping(value = "/purchased/songs", method = RequestMethod.GET)
   public String home(Model model)
   {   

     SessionManager.startOperation();

     ChargeTryDAOBase ctdb=new ChargeTryDAOBase();

     List <ChargeTry> data=ctdb.findByRemoteId("dsfsdfsdf8");


     SessionManager.endOperation();

     model.addAttribute("result", "data" );

     return "home";
   }



   @Override
   public void setApplicationContext(ApplicationContext arg0) throws BeansException
   {
     this.applicationContext = arg0;
   }

}
更改某些Hibernate依赖项时,会出现以下错误:

 org.springframework.web.util.NestedServletException: Handler processing
 nested exception is java.lang.NoSuchMethodError: 
 org.hibernate.SessionFactory.getCurrentSession()Lorg/hibernate/Session;

    .....         

 java.lang.NoSuchMethodError:
 org.hibernate.SessionFactory.getCurrentSession()Lorg/hibernate/Session;
 java.lang.IllegalStateException: Could not locate SessionFactory in JNDI
当我在一个简单的Java应用程序中测试上述代码时,一切都很好

这是spring hibernate配置问题吗

谢谢你的帮助。

请学习

1:

2

了解SpringMVC和Hibernate的集成

您可以使用Hibernate配置文件-以下是链接-


但是,由于您的应用程序位于spring托管容器中,我们强烈建议您使用applicationcontext.xml,以便更好地维护和管理代码库和性能。

谢谢您的帮助,我终于完成了所有工作。我跟着你的链接,用谷歌搜索了一下。问题是我没有在hibernate.cfg.xml文件中启用datasource参数,我还配置了C3P0JDBC连接提供程序

我的最后一个hibernate.cfg.xml文件是:

  <hibernate-configuration>
    <session-factory>
      <property name="hibernate.bytecode.use_reflection_optimizer">true</property>
      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
       <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
       <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
       <property name="current_session_context_class">thread</property>
       <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydb</property>
       <property name="hibernate.connection.username">userdb</property>
       <property name="hibernate.connection.password">12345</property>
       <property name="hibernate.connection.datasource">java:comp/env/jdbc/mydb</property>
       <property name="hibernate.format_sql">true</property>
       <property name="hibernate.use_sql_comments">true</property>


       <property name="hibernate.connection.provider_class">org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider</property>
       <property name="hibernate.c3p0.min_size">2</property>
       <property name="hibernate.c3p0.numHelperThreads">4</property>
       <property name="hibernate.c3p0.max_size">10</property>
       <property name="hibernate.c3p0.timeout">300</property>
       <property name="hibernate.c3p0.max_statements">100</property>
       <property name="hibernate.c3p0.idle_test_period">1800</property>
       <property name="hibernate.c3p0.acquire_increment">2</property>
    <hibernate-configuration>
    <session-factory>

真的
com.mysql.jdbc.Driver
org.hibernate.dialogue.mysqldialogue
org.hibernate.transaction.jdbc事务工厂
线
jdbc:mysql://localhost:3306/mydb
用户数据库
12345
java:comp/env/jdbc/mydb
真的
真的
org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider
2.
4.
10
300
100
1800
2.
在my web.xml中,我添加了以下行:

<resource-ref>
    <description>This is a MySQL database connection</description>
    <res-ref-name>jdbc/mydb</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
 </resource-ref>    
    <beans:bean id="dataSource"    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/>
      <beans:property name="url" value="jdbc:mysql://localhost:3306/mydb"/> 
      <beans:property name="username" value="userdb"/>
      <beans:property name="password" value="12345"/> 
    </beans:bean>  

    <beans:bean id="sessionFactory"  class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
      <beans:property name="dataSource" ref="dataSource" />
      <beans:property name="configLocation">
         <beans:value>classpath:hibernate.cfg.xml</beans:value>
      </beans:property>
    </beans:bean>

这是一个MySQL数据库连接
jdbc/mydb
javax.sql.DataSource
容器
在Spring上下文文件中,我添加了以下行:

<resource-ref>
    <description>This is a MySQL database connection</description>
    <res-ref-name>jdbc/mydb</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
 </resource-ref>    
    <beans:bean id="dataSource"    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/>
      <beans:property name="url" value="jdbc:mysql://localhost:3306/mydb"/> 
      <beans:property name="username" value="userdb"/>
      <beans:property name="password" value="12345"/> 
    </beans:bean>  

    <beans:bean id="sessionFactory"  class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
      <beans:property name="dataSource" ref="dataSource" />
      <beans:property name="configLocation">
         <beans:value>classpath:hibernate.cfg.xml</beans:value>
      </beans:property>
    </beans:bean>

类路径:hibernate.cfg.xml
奇怪的是,使用默认的Hibernate连接提供程序,上面的解决方案不起作用,但当我配置C3P0时,所有这些都开始起作用


感谢您的帮助。

您是否在Spring配置文件中配置了所有必需的Hibernate属性?我的Hibernate属性文件是:我有一个jar,它封装了所有的数据库访问功能,在普通的Java应用程序中,我只需要将这个模块添加到access数据库中,它就可以从头开始工作,但是使用Spring它不起作用。为此,您必须使用Spring Hibernate配置。在哪里可以找到在Spring中配置访问模块的示例?我正在使用Hibernate4和Tomcat7。谢谢。但是我已经在jar中有了一个hibernate.cfg.xml,在这里我配置了数据源的所有属性。我是否必须在春季再次配置hibernate.cfg.xml中指定的属性?谢谢。在Spring容器管理bean中,在上面第一个链接中的applicationcontext.xml中配置hibernate属性是Spring的最佳实践。感谢您的回复。但是,是否可以将所有hibernate配置封装在jar中包含的hibernate.cfg.xml中,而不必在Spring上层进行配置?非常感谢您的建议和帮助。感谢您的帮助,我已经测试了链接中指示的配置,但仍然收到相同的错误。奇怪的是,我没有得到一个Spring上下文错误,但当:tx=sessionFactory.getCurrentSession().beginTransaction()时,一切似乎都正常;如果执行,则会出现错误。非常感谢。