2016-10-03 3 views
0

Я использую интеграцию весны и спящего режима и пытаюсь создать простую CRUD-приложение с MYSQL в качестве бэкэнд.Данные не вставляются в базу данных, используя hibernateTemplate class

Here is my Employee.java 


package com.springhibernate; 


public class Employee { 
    private int id; 
    private String name; 
    private float salary; 

    public Employee() { 
     // TODO Auto-generated constructor stub 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public float getSalary() { 
     return salary; 
    } 

    public void setSalary(float salary) { 
     this.salary = salary; 
    } 

} 

EmployeeDao.java 

    package com.springhibernate; 

import java.util.ArrayList; 
import java.util.List; 

import org.springframework.orm.hibernate4.HibernateTemplate; 

public class EmployeeDao { 
    HibernateTemplate template; 

    public void setTemplate(HibernateTemplate template) { 
     this.template = template; 
    } 

    // method to save employee 
    public void saveEmployee(Employee e) { 
     System.out.println(e.getId()); 
     System.out.println(e.getName()); 
     System.out.println(e.getSalary()); 
     template.save(e); 
     System.out.println("After template.save method"); 
    } 

    // method to update employee 
    public void updateEmployee(Employee e) { 
     template.update(e); 
    } 

    // method to delete employee 
    public void deleteEmployee(Employee e) { 
     template.delete(e); 
    } 

    // method to return one employee of given id 
    public Employee getById(int id) { 
     Employee e = (Employee) template.get(Employee.class, id); 
     return e; 
    } 

    // method to return all employees 
    public List<Employee> getEmployees() { 
     List<Employee> list = new ArrayList<Employee>(); 
     list = template.loadAll(Employee.class); 
     template.setCheckWriteOperations(false); 
     return list; 
    } 

} 

applicationContext.xml 

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/nupur" /> 
     <property name="username" value="root" /> 
     <property name="password" value="nupur" /> 
    </bean> 

    <bean id="mysessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource"></property> 

     <property name="mappingResources"> 
      <list> 
       <value>Employee.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.show_sql">true</prop> 

      </props> 
     </property> 
    </bean> 

    <bean id="template" class="org.springframework.orm.hibernate4.HibernateTemplate"> 
     <property name="sessionFactory" ref="mysessionFactory"></property> 
     <property name="checkWriteOperations" value="false"></property> 
    </bean> 

    <bean id="d" class="com.springhibernate.EmployeeDao"> 
     <property name="template" ref="template"></property> 
    </bean> 
</beans> 

InsertTest.java 

package com.springhibernate; 

import org.springframework.beans.factory.BeanFactory; 
import org.springframework.beans.factory.xml.XmlBeanFactory; 
import org.springframework.core.io.ClassPathResource; 
import org.springframework.core.io.Resource; 

@SuppressWarnings("deprecation") 
public class InsertTest { 

    public static void main(String[] args) { 

     Resource r = new ClassPathResource("applicationContext.xml"); 
     BeanFactory factory = new XmlBeanFactory(r); 

     EmployeeDao dao = (EmployeeDao) factory.getBean("d"); 

     Employee e = new Employee(); 
     e.setId(164); 
     e.setName("varun"); 
     e.setSalary(50000); 

     System.out.println("Before calling dao method"); 
     dao.saveEmployee(e); 
     System.out.println("After calling dao method"); 
    } 

} 

Employee.hbm.xml 

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated Oct 3, 2016 1:19:10 PM by Hibernate Tools 3.4.0.CR1 --> 
<hibernate-mapping> 
    <class name="com.springhibernate.Employee" table="EMPLOYEE"> 
     <id name="id" type="int"> 
      <column name="ID" /> 
      <generator class="assigned" /> 
     </id> 
     <property name="name" type="java.lang.String"> 
      <column name="NAME" /> 
     </property> 
     <property name="salary" type="float"> 
      <column name="SALARY" /> 
     </property> 
    </class> 
</hibernate-mapping> 

Консоль не показывает ошибок, все же данные не вставлены в базу данных, пожалуйста, скажите мне, где я ошибаюсь?

я напечатал некоторые из заявлений SOUT проверить до где код является выполнение и выход заключается в следующем:

перед вызовом метода DAO 164 Варуна

50000.0 После метода template.save После вызова метода dao

+0

Строка «После того, как метод template.save» будет напечатан на вашей консоли? –

+0

Для начала используйте «ApplicationContext», а не «BeanFactory». Затем добавьте диспетчер транзакций, положите '@ Transactional' на свой dao и добавьте' 'tx: annotation-driven />' в вашу конфигурацию. Без trnsactions ничего не останется. –

ответ

1

Добавить декларативное управление транзакциями, как показано ниже в классе EmployeeDao.java.

@Transactional 
public void saveEmployee(Employee e) { 
    System.out.println(e.getId()); 
    System.out.println(e.getName()); 
    System.out.println(e.getSalary()); 
    template.save(e); 
    System.out.println("After template.save method"); 
} 

Весной, вы должны использовать декларативное управление транзакциями, что позволяет избежать открытия, совершая, закрытие и гиперемию. Все это делается весной автоматически.

+0

Я добавил @Transactional, но затем также данные не вставляются – Nupur

+0

добавили ли вы в свой файл конфигурации? –

+0

<ТЕ: аннотация привода /> – Nupur

0

я еще не сверяться с Eclipse, но у меня есть некоторые идеи для вас:

  1. модель классы должны иметь конструктор полностью, особенно если вы используете @Autowired для классов DaoImpl. Здесь они Employee() и Employee (id, name, pay)
  2. добавить @Repository в классах DaoImpl, @ Контроллер в контроллере, @Transactional в DaoImpl, если используется транзакция, @ Сервис в классах службы.
    Здесь вы зарегистрировались, так что не нужно @Repository
+0

Я добавил все, но потом тоже не работает. Не могли бы вы рассказать мне о проблеме в моем коде? – Nupur

+0

Извините. Я не могу найти проблему в вашем коде. Но в качестве ссылки для Hibernate вы можете использовать ее: https://github.com/thamluong/test –

Смежные вопросы