【问题标题】:Making hibernate project with spring-rest使用 spring-rest 制作休眠项目
【发布时间】:2016-11-16 18:10:31
【问题描述】:

我正在尝试使用 hibernate 制作一个简单的 spring rest 项目。

我已经做了DAO和服务层。我还在 dispatcher-servlet 中配置了 bean,并在控制器类中使用服务和服务中的 DAO 会话工厂和事务自动装配。

但我不断收到错误。

我还上传了一张错误照片。

dispatcher-servlet.xml:
<?xml version="1.0" encoding="UTF-8"?>
beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xmlns:tx="http://www.springframework.org/schema/tx"

   xsi:schemaLocation="http://www.springframework.org/schema/beans                        http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context.xsd
      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
      http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--    <mvc:annotation-driven />  -->

<!--    <resources mapping="/resources/**" location="/resources/" />  -->

<!--JDBC ko properties-->
<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
         destroy-method="close">  
    <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />  
    <beans:property name="url"  value="jdbc:mysql://localhost:3306/student_database" />  
    <beans:property name="username" value="root" />  
    <beans:property name="password" value="" />  
</beans:bean>  

<!-- Hibernate ko SessionFactory Bean definition part -->  
<beans:bean id="hibernate5AnnotatedSessionFactory"  
         class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
    <beans:property name="dataSource" ref="dataSource" />  
<!--        <beans:property name="annotatedClasses">  
        <beans:list>  
            <beans:value>com.mycompany.SpringRestMaven.bean</beans:value>  
        </beans:list>  
    </beans:property>  -->
    <beans:property name="hibernateProperties">  
        <beans:props>  
            <beans:prop      key="hibernate.dialect">org.hibernate.dialect.MySQLDialect  
            </beans:prop>  
            <beans:prop key="hibernate.show_sql">true</beans:prop>  
        </beans:props>  
    </beans:property>  
</beans:bean>  

<context:component-scan base-    package="com.mycompany.SpringRestMaven.controller"/>
<tx:annotation-driven transaction-manager="transactionManager"/>  

<beans:bean id="transactionManager"      class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
    <beans:property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory" />  
</beans:bean>  

controller class:
package com.mycompany.SpringRestMaven.controller;
/* I have not included imports*/
@RestController
public class StudentController {

@Autowired
ServiceLayer studentService;

@RequestMapping(value = "/insert", method = RequestMethod.POST, headers =   "Accept=application/json")
public void insert(@RequestBody Student student) {
    studentService.insert(student);
}

@RequestMapping(value = "/update", method = RequestMethod.PUT, headers =  "Accept=application/json")
public void update(@RequestBody Student student) {
    studentService.update(student);
}

@RequestMapping(value = "/delete", method = RequestMethod.DELETE, headers = "Accept=application/json")
public void delete(@PathVariable("id") int id) {
    studentService.delete(id);
}

@RequestMapping(value = "/getAll", method = RequestMethod.GET, headers =  "Accept=application/json")
public List<Student> getAll() {

    List<Student> listOfStudent = studentService.getAll();
    return listOfStudent;
}

@RequestMapping(value = "/searchById/{id}", method = RequestMethod.GET,   headers = "Accept=application/json")
public Student searchById(@PathVariable int id) {
    return studentService.searchById(id);
}
}

This is my service layer implementation:

package com.mycompany.SpringRestMaven.Service;

@Service("studentService")
public class ServiceImpl implements ServiceLayer {

@Autowired StudentDAO studentDao;

@Transactional
@Override
public void insert(Student s) {
    studentDao.insert(s);
}

@Transactional
@Override
public void update(Student s) {
    studentDao.update(s);
}

@Transactional
@Override
public void delete(int id) {
    studentDao.delete(id);
}

@Transactional
@Override
public List<Student> getAll() {
    return studentDao.getAll();
}

@Transactional
@Override
public Student searchById(int id) {
    return studentDao.searchById(id);
}

}

This is my DAO implementation:

package com.mycompany.SpringRestMaven.DAO;

@Repository
public class StudentDAOImpl implements StudentDAO {

@Autowired
private SessionFactory sessionFactory;
private Session session;
private Transaction trans;

@Override
public void insert(Student s) {
    session = sessionFactory.openSession();
    trans = session.beginTransaction();
    session.save(s);
    trans.commit();
    session.close();
}

@Override
public void update(Student s) {
    session = sessionFactory.openSession();
    trans = session.beginTransaction();
    session.saveOrUpdate(s);
    trans.commit();
    session.close();
}

@Override
public void delete(int id) {
    session = sessionFactory.openSession();
    trans = session.beginTransaction();
    Student sObject = (Student) session.get(Student.class, id);
    session.delete(sObject);
    trans.commit();
    session.close();
}

@Override
public List<Student> getAll() {
    return session.createQuery("SELECT s FROM Student s").list();
}

@Override
public Student searchById(int id) {
    return (Student) session.get(Student.class, id);
}


}

我收到此错误:

【问题讨论】:

  • 看不到你的错误!
  • 报错说spring找不到ServiceLayer类型的bean。
  • 将组件扫描库更改为 com.mycompany.SpringRestMaven。使用您当前的配置,它找不到不在控制器包中的 Bean

标签: java spring hibernate


【解决方案1】:

更改配置

<context:component-scan base-    package="com.mycompany.SpringRestMaven.controller"/>

<context:component-scan base-    package="com.mycompany.SpringRestMaven"/>

然后 Spring 扫描 SpringRestMaven 包下的所有类,并从带注释的类中创建 bean。

在您当前的配置中,Spring 仅从 .controller 包下扫描和创建 bean。您的 ServiceLayer 不在此包中,因此 Spring 无法找到该类,无法创建 bean 并且无法自动装配该字段。

【讨论】:

  • 谢谢您,先生,我做到了您的要求。事实上,我以前只做过,但我收到了这个错误,请看一下:
  • 严重:加载应用程序时出现异常:.ConflictingBeanDefinitionException:bean 类 [com.mycompany.SpringRestMaven.WebController] 的注释指定的 bean 名称“webController”与现有的不兼容 bean 定义冲突名称和类 [com.mycompany.SpringRestMaven.controller.WebController]
  • 看起来你有两个名为 WebController 的类(在不同的包中)?
猜你喜欢
  • 1970-01-01
  • 2017-08-06
  • 1970-01-01
  • 2012-08-23
  • 2017-04-19
  • 2023-03-08
  • 1970-01-01
  • 2013-03-12
  • 2020-11-07
相关资源
最近更新 更多