Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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 如何使用刷新模式';自动';或';提交';_Java_Spring_Hibernate_Session - Fatal编程技术网

Java 如何使用刷新模式';自动';或';提交';

Java 如何使用刷新模式';自动';或';提交';,java,spring,hibernate,session,Java,Spring,Hibernate,Session,正如我的标题所述,我正在应用程序中使用hibernateAutoflush模式机制。因此,当我更改hibernate持久对象中的任何数据时,它会自动反映在数据库中。我不要这个。所以我找到了一个解决方案,使用FlushModeCommit 这是我的实际问题: 使用Commit刷新模式是否比使用Auto更好?及 从文件中可以看出,本声明的含义是什么 有时在按顺序执行查询之前刷新会话 以确保查询永远不会返回过时状态 使用提交刷新模式而不是自动刷新是否更好 当应用程序使用查询时,FlushMod

正如我的标题所述,我正在应用程序中使用hibernate
Auto
flush模式机制。因此,当我更改hibernate持久对象中的任何数据时,它会自动反映在数据库中。我不要这个。所以我找到了一个解决方案,使用FlushMode
Commit

这是我的实际问题:

  • 使用
    Commit
    刷新模式是否比使用
    Auto
    更好?及
  • 从文件中可以看出,本声明的含义是什么

    有时在按顺序执行查询之前刷新会话 以确保查询永远不会返回过时状态

使用提交刷新模式而不是自动刷新是否更好

当应用程序使用查询时,
FlushMode.COMMIT
很可能会执行得更好,因为它不会在每次查询之前刷新会话。我知道每个javadoc应该只在必要时刷新会话,但根据我的经验,FlushMode.COMMIT在只读会话中执行得更好。自动刷新并不意味着对持久对象的任何更改都会立即发布到数据库

文件中规定的以下声明的含义是什么

有时会在执行查询之前刷新会话,以确保查询永远不会返回过时状态

如上所述,当使用FlushMode.AUTO(默认值)时,它将在对数据库进行的每个查询(HQL、条件、SQL查询)之前刷新会话,以确保结果将包含当前会话中添加的所有实体。

Hibernate(和JPA)设计用于自动检测对持久对象的更改并将其持久化到数据库中。没有“保存”操作

如果不希望保存内容,则应使用分离的对象。使用
无状态会话
加载它们,或者在加载对象后调用detach。这会将它们从将自动保存它们的监视中删除


不要弄乱刷新设置,这只会让你以后头疼。

检查链接并滚动到第5.1.3页刷新会话。干杯,你要找的是交易。您应该(通常)使用事务来定义何时将事情提交到数据库,而不是手动刷新会话:仅供读者参考,这个答案与Hibernate文档完全相反。我首先阅读了文档,然后来到这里,我认为这个答案清楚地解释了文档中的含义。虽然“会话有时被刷新…”并不意味着它在每次查询之前都被刷新。这里解释了“有时”的含义,你能具体说明它会给你带来什么样的头痛吗?我们将此视为一种解决方案,希望知道它是否不是正确的解决方案。假设您有一个导致错误的写入。进一步延迟刷新意味着一个更大的问题,您可能要等到几次查询之后才能发现错误。希望您不想通知用户!或者,假设您的只读应用程序突然需要更改以跟踪用户正在浏览的内容—用于度量、报告或审计目的。现在,您必须重新访问应用程序中的每个查询。这些只是我脑海中的几个例子。谢谢@Barrett。这些正是我们发现的问题-(