各位大虾救命呀,我在工程文件中编写了个userdao用于进行数据库操作,在spring的配置文件beans.xml中做了配置,可老出问题Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao' defined in file [E:\myjava\eclipse\NetShop\WebRoot\WEB-INF\beans.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: net/sf/hibernate/SessionFactory
java.lang.NoClassDefFoundError: net/sf/hibernate/SessionFactory
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getDeclaredMethods(Unknown Source)
at java.beans.Introspector$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.beans.Introspector.getPublicDeclaredMethods(Unknown Source)
at java.beans.Introspector.getTargetMethodInfo(Unknown Source)
at java.beans.Introspector.getBeanInfo(Unknown Source)
at java.beans.Introspector.getBeanInfo(Unknown Source)
at java.beans.Introspector.getBeanInfo(Unknown Source)
at java.beans.Introspector.<init>(Unknown Source)
at java.beans.Introspector.getBeanInfo(Unknown Source)
at org.springframework.beans.CachedIntrospectionResults.<init>(CachedIntrospectionResults.java:150)
at org.springframework.beans.CachedIntrospectionResults.forClass(CachedIntrospectionResults.java:87)
at org.springframework.beans.BeanWrapperImpl.setIntrospectionClass(BeanWrapperImpl.java:237)
at org.springframework.beans.BeanWrapperImpl.setWrappedInstance(BeanWrapperImpl.java:195)
at org.springframework.beans.BeanWrapperImpl.setWrappedInstance(BeanWrapperImpl.java:179)
at org.springframework.beans.BeanWrapperImpl.<init>(BeanWrapperImpl.java:132)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:487)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:362)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:283)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313)
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:89)
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:74)
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:65)
at com.ke.netshop.util.Test.main(Test.java:16)我的benas.xml<!-- hibernate datasource
-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" lazy-init="default" autowire="default" dependency-check="default">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/netshop" />
<property name="username" value="root" />
<property name="password" value="123" />
<property name="maxActive" value="20" />
<property name="maxIdle" value="10" />
<property name="initialSize" value="1" />
<property name="maxWait" value="1000" />
<property name="defaultAutoCommit" value="true" />
<property name="removeAbandoned" value="true" />
<property name="removeAbandonedTimeout" value="60" />
<property name="logAbandoned" value="true" />
</bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" lazy-init="default" autowire="default" dependency-check="default">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>com/ke/netshop/model/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
</bean>
<!-- Generic DAO - can be used when doing standard CRUD
-->
<bean id="userDao" class="com.ke.netshop.dao.UserDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
UserDao文件
package com.ke.netshop.dao;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;
import org.springframework.orm.hibernate3.HibernateTemplate;
import com.ke.netshop.model.User;
public class UserDao extends HibernateDaoSupport{
public boolean save(User user){
boolean bool;
try {
this.getHibernateTemplate().save(user);
bool=true;
} catch (Exception e) {
// TODO: handle exception
bool=false;
}
return bool;
}
}User.hbm.xml文件
<class name="com.ke.netshop.model.User" table="user" catalog="netshop">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="45" not-null="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="45" not-null="true" />
</property>
<property name="email" type="java.lang.String">
<column name="email" length="45" not-null="true" />
</property>
</class>数据表中id是int型,auto_increment用于测试的类public class Test { public static void main(String args[]){
ApplicationContext context=new FileSystemXmlApplicationContext("WebRoot/WEB-INF/beans.xml");
try {BasicDataSource ds=(BasicDataSource) context.getBean("dataSource");
UserDao userDao=(UserDao)context.getBean("userDao");
System.out.println("file inits success!");
} catch (Exception e) {
// TODO: handle exception
System.out.println("file inits failed!");
}
}
}
可老是出现Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao' 这些信息
我在测试类中获取dataSource的时候是可以的,还用dataSource成功进行了数据库操作。
不过为什么我的userDao无法创建呢?
解决方案 »
- spring mvc404问题
- ERROR LazyInitializationException:19 - illegal access to loading collection
- JSP 登录2个ID 后session问题
- Spring中Hibernate jdbc同时操作导致数据读取不出来
- java.lang.NullPointerException
- 高分请教spring+struts+hibernate中出现的404错误
- struts2中如何实现在struts.xml配置文件的action标签中加入自定义属性?
- 一个初学者的简单提问!
- sdfgsdf
- 请问大家怎么同时启动多个线程,难道把线程调用的方法执行很多遍吗?
- Jfreechar X轴 字体方向
- 有个问题希望大家帮忙解决
我原来的userDao是Struts中Action的一个属性,但是我运行的时候老出错,所以我就不用
web测试了,改用一般的main方法测试(用这个方法时我把Action中的Property参数删除了,
所以排除struts的影响了),
<bean name="/login" class="com.ke.netshop.action.LoginAction"
abstract="false" singleton="true" lazy-init="default"
autowire="default" dependency-check="default">
</bean>
可是也不行
不过当我把以下的删除以后
<bean id="userDao" class="com.ke.netshop.dao.UserDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
beanx.xml就可以正常加载了,可问题出在哪里呢
public class Test {
public static void main(String args[]){
ApplicationContext context=new FileSystemXmlApplicationContext("WebRoot/WEB-INF/beans.xml");
try {
LocalSessionFactoryBean sessionFactory=(LocalSessionFactoryBean) context.getBean("sessionFactory");
System.out.println("file inits success!");
} catch (Exception e) {
// TODO: handle exception
System.out.println("file inits failed!");
}
}
结果输出file inits failed!
那应该是sessionFactory配置有问题了,不过错在哪里呢,难道我的jar包没导入完么,可是
我都添加了Hibernate,Spring支持了,应该没问题呀,mysql驱动也添加了
应该是有一个hiberntae2.1的包没有加载过来,建议楼主去加载下!
用Hibernate3的全部配置是怎么样的呢,麻烦指教
package com.ke.netshop.dao;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.LocalSessionFactoryBean;
import com.ke.netshop.model.User;
public class UserDao{
private SessionFactory sessionFactory;
private HibernateTemplate hibernateTemplate=null;
public void setSessionFactory(SessionFactory sessionFactory){
this.sessionFactory=sessionFactory;
}
public HibernateTemplate getHibernateTemplate(){
if(hibernateTemplate==null){
hibernateTemplate=new HibernateTemplate(sessionFactory);
}
return hibernateTemplate;
}
public boolean save(User user){
boolean bool;
try {
this.getHibernateTemplate().save(user);
bool=true;
} catch (Exception e) {
// TODO: handle exception
bool=false;
}
return bool;
}
哪位牛人能否解释下原因啊,另外还想问的是HIbernateTemplate的save方法中的参数,比如说此例中的
user,必须全部设置了属性(name,password,email)才行么,我只设置name,结果数据库没有更新,
有没有哪个函数是不管user中的属性已经设置了多少个都可以实现更新的函数呢?是不是要用Hql语言解决呢?
package com.ke.netshop.dao;
import org.springframework.orm.hibernate.support.HibernateDaoSupport; import org.springframework.orm.hibernate3.support.HibernateDaoSupport;