Spring 创建Hibernate SessionFactory bean时出错
我在尝试运行应用程序时遇到了这个错误,我认为它在抱怨创建sessionFactory时出错,注入依赖项失败。我一整天都在努力修理它。多谢各位 这是从控制台输出的错误Spring 创建Hibernate SessionFactory bean时出错,spring,hibernate,spring-mvc,Spring,Hibernate,Spring Mvc,我在尝试运行应用程序时遇到了这个错误,我认为它在抱怨创建sessionFactory时出错,注入依赖项失败。我一整天都在努力修理它。多谢各位 这是从控制台输出的错误 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao': Injection of autowired dependencies failed; nested exception is org.s
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory com.donah.web.dao.UserDao.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [com/donah/web/config/dao-context.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: com.donah.web.dao.Users
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:288)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1116)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory com.donah.web.dao.UserDao.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [com/donah/web/config/dao-context.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: com.donah.web.dao.Users
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:514)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285)
... 22 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [com/donah/web/config/dao-context.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: com.donah.web.dao.Users
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1482)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:910)!
这是UserDao类
@Repository
@Component("userDao")
public class UserDao {
public UserDao(){}
@Autowired
private SessionFactory sessionFactory;
private Session session() {
return sessionFactory.getCurrentSession();
}
public void createUser(Users user) {
session().save(user);
}
public Users getUser(String username) {
Criteria crit = session().createCriteria(Users.class);
crit.add(Restrictions.idEq(username));
return (Users) crit.uniqueResult();
}
org.hibernate.AnnotationException:未为实体com.donah.web.dao.Users指定标识符
这就是你问题的原因。这意味着用户实体顺便说一句,在名为dao的包中有JPA实体没有标识符是很奇怪的。每个JPA实体都必须有一个标识符
基于Restrictions.idEqusername,我猜您使用username作为主键,因此应该在Users实体中的username属性上添加注释
例如,可以找到更多细节
@Entity
@Table(name="users")
public class Users {
@Id
private String username;
// other properties and getters/setters
}