Функция saveOrUpdate () в hibernate не работает, вместо этого выполняется запрос на выборку, который нигде не упоминается в программе. (используя пружину + спящий режим)

0

Вот основная функция, значения были установлены для bean-компонента.

package demo.sphbIntegrate;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App 
{
    public static void main( String[] args )
    {
        ApplicationContext context=new ClassPathXmlApplicationContext("sphb.xml");
        EmployeeDAO edao=(EmployeeDAO) context.getBean("d");
        Employee e=new Employee();
        e.setId(1);
        e.setName("sourav");
        e.setSalary(100000);
        edao.saveEmployee(e);
    }
}
Это бобовый класс.
package demo.sphbIntegrate;

public class Employee 
{
    private int id;
    private String name;
    private int salary;
    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 int getSalary() {
        return salary;
    }
    public void setSalary(int salary) {
        this.salary = salary;
    }
  
}

И это мой класс DAO.

package demo.sphbIntegrate;

import org.springframework.orm.hibernate5.HibernateTemplate;

public class EmployeeDAO 
{
    HibernateTemplate template;

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

    public void saveEmployee(Employee e) 
    {
	template.saveOrUpdate(e);
    }
}

Согласно коду, запись должна быть занесена в таблицу. Однако происходит что-то странное, выполняется запрос на выборку, который нигде не упоминается во всей программе. Я не могу обернуть голову вокруг этой аномалии. PS: я уверен, что я запускаю правильную программу и все файлы сохранены правильно, также не написано никакого кода для запроса на выборку во всем пакете.

Вот вывод:

log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Hibernate: select employee_.ID, employee_.NAME as NAME2_0_, employee_.SALARY as SALARY3_0_ from EMPLOYEE employee_ where employee_.ID=?
  • 6
    Вы устанавливаете id следовательно, hibernate должен проверить, существует ли запись или нет.
  • 0
    Как сказал @ M.Deinum, поскольку вы используете id, система предполагает, что вы пытаетесь обновить запись. Ищет запись в базе данных. Поскольку он не найден, он не обновляет данные. Если вы хотите создать новые данные, удалите идентификатор и попробуйте автоматически увеличить поле первичного ключа. Если вы хотите установить значение id, используйте метод save вместо метода saveorupdate.
Показать ещё 1 комментарий
Теги:
spring
hibernate
java-ee

1 ответ

0

В этом сценарии не о чем беспокоиться, потому что saveOrUpdate() выполняет как сохранение, так и обновление.

Сначала он проверяет, существует ли передаваемый вами идентификатор в таблице или нет по той же причине, по которой вы видите запрос выбора. Если вы внимательно соблюдаете свой запрос

select employee_.ID, employee_.NAME as NAME2_0_, employee_.SALARY as SALARY3_0_ from EMPLOYEE employee_ where employee_.ID=?

Вы увидите ID где состояние.

Если этот запрос не даст результата, будет вставлена только новая запись, иначе произойдет обновление.

  • 0
    Теперь я понимаю, почему запускается запрос на выборку. Но главная проблема в том, что запись не вставляется в таблицу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню