Вот основная функция, значения были установлены для 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=?
В этом сценарии не о чем беспокоиться, потому что saveOrUpdate()
выполняет как сохранение, так и обновление.
Сначала он проверяет, существует ли передаваемый вами идентификатор в таблице или нет по той же причине, по которой вы видите запрос выбора. Если вы внимательно соблюдаете свой запрос
select employee_.ID, employee_.NAME as NAME2_0_, employee_.SALARY as SALARY3_0_ from EMPLOYEE employee_ where employee_.ID=?
Вы увидите ID
где состояние.
Если этот запрос не даст результата, будет вставлена только новая запись, иначе произойдет обновление.
id
следовательно, hibernate должен проверить, существует ли запись или нет.