为了账号安全,请及时绑定邮箱和手机立即绑定

saveOrUpdate() 不起作用,而是执行了一个在程序中没有提到的选择查询。

saveOrUpdate() 不起作用,而是执行了一个在程序中没有提到的选择查询。

哆啦的时光机 2022-06-04 15:25:26
这是主要功能,值已设置为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=?
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

在这种情况下没有什么可担心的,因为saveOrUpdate()保存和更新这两项工作都完成了。

它首先检查您传递的 ID 是否存在于表中,原因与您看到选择查询的原因相同。如果您仔细观察您的查询

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

你会看到ID在哪里条件。

如果此查询没有返回结果,则只会插入新记录,否则将发生更新。


查看完整回答
反对 回复 2022-06-04
  • 1 回答
  • 0 关注
  • 638 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信