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