Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “之间的区别是什么?”;更新;课时上课的方法和;“执行更新”;hibernate中查询类的方法,何时使用哪个方法?_Java_Sql_Hibernate - Fatal编程技术网

Java “之间的区别是什么?”;更新;课时上课的方法和;“执行更新”;hibernate中查询类的方法,何时使用哪个方法?

Java “之间的区别是什么?”;更新;课时上课的方法和;“执行更新”;hibernate中查询类的方法,何时使用哪个方法?,java,sql,hibernate,Java,Sql,Hibernate,会话类的“update”方法和hibernate中查询类的“executeupdate”方法有什么区别,当使用哪种方法时?简而言之:用于更新单个映射实体;使用,您可以执行自定义的delete/update语句(编写为HQL或纯SQL),并获得更新/删除的实体计数结果。 正确的方法取决于您的需要:使用executeupdate()可以根据查询删除/更新任意数量的对象,使用update()一次只能更新一个对象。这两种方法在不同的抽象级别工作: 基本上接受它的参数实体,在它的表中找到具有相同主键的行

会话类的“update”方法和hibernate中查询类的“executeupdate”方法有什么区别,当使用哪种方法时?

简而言之:用于更新单个映射实体;使用,您可以执行自定义的delete/update语句(编写为HQL或纯SQL),并获得更新/删除的实体计数结果。

正确的方法取决于您的需要:使用
executeupdate()
可以根据查询删除/更新任意数量的对象,使用
update()
一次只能更新一个对象。

这两种方法在不同的抽象级别工作:

  • 基本上接受它的参数实体,在它的表中找到具有相同主键的行,并发出一个
    更新
    ,以便在提交事务后,该行具有参数对象拥有的所有信息。此外,如果使用
    cascade=save update
    对所有依赖对象进行注释/标记,则更新将级联到所有依赖对象

  • 将解析您创建的查询(应该是
    UPDATE
    DELETE
    语句)并将其发送到数据库。不执行级联或其他逻辑


什么时候使用它取决于您的需要,正如bellabax所说:
executeUpdate
对于更新特定的表和几行很有用,但是如果我没有严格的时间限制,我更喜欢
update
的简单性(发布几个数据库
update
会更慢).

executeUpdate允许您运行Hibernate不支持的本机SQL查询。例如,您需要使用某些条件进行更新

使用executeUpdate功能更强大,但不要在Hibernate事务中使用它。给出如下方法:

    @@Transactional(readOnly = false)
public void updateLastActivity(VaultUserImpl user, Date lastActivity) {
    Query query = getCurrentSession().createQuery("UPDATE VaultUserImpl user set user.lastActivity=:lastActivity where user.id=:id");
    query.setDate("lastActivity", lastActivity);
    query.setLong("id", user.getId());
    query.executeUpdate();

    user.setLastActivity(lastActivity);
}
默认情况下,Hibernate将在事务注释中自动调用update方法。这意味着上面的查询不仅是必要的,而且是危险的,因为我们丢失了数据

事实上,query.setDate(Date-datetime)不返回完整的日期+时间值,而只返回日期

可以很快编写上面的代码:

    @@Transactional(readOnly = false)
public void updateLastActivity(VaultUserImpl user, Date lastActivity) {
    user.setLastActivity(lastActivity);
}

是的,我尝试使用“executeUpdate”进行更新查询并更新必要的字段。。。在“更新”中,我们必须更新整个实体字段。