gpt4 book ai didi

java - Hibernate session.flush() 即使设置了自动提交

转载 作者:行者123 更新时间:2023-12-01 09:18:53 25 4
gpt4 key购买 nike

我意识到需要为主键不是GenerateValue 的实体调用session.flush(),然后才能将其保留在数据库中。即使我已经将自动提交设置为 true,我也必须这样做。这是我的 hibernate 配置

<property name="hibernate.dialect">${hibernate.dialect}</property>
<property name="hibernate.connection.driver_class">${hibernate.connection.driver_class}</property>
<property name="hibernate.connection.url">${hibernate.connection.url}</property>
<property name="hibernate.connection.username">${hibernate.connection.username}</property>
<property name="hibernate.connection.password">${hibernate.connection.password}</property>
<property name="connection.autocommit">true</property>

这是一个实体的示例,我需要在保存后在代码中调用 session.flush() ,然后才能持久化

    @Id
@Column(name = "MembTypeCode")
private String memTypeCode;
@Column(name = "MemberType")
private String memberType;
...

但是对于 Id 为 generatedValue 的实体(如下所示),我不需要在保存后在代码中调用 session.flush() 以便将其保留在数据库中,因为我已将 autocommit 设置为 true .

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "PrescriptId")
private int prescriptId;
@Column(name = "InvNum")
private Integer invNum;
@Column(name = "DocType")
private String docType;
...

有人可以向我解释一下为什么我会遇到这种情况吗?我正在使用 Hibernate 4.1.0.FINAL

最佳答案

自动提交和session.flush()是两个不同的东西:

  1. 自动提交在底层 JDBC 事务上设置自动提交模式。它基本上意味着每个 SQL 语句(SELECT、UPDATE、INSERT、DELETE...)都在其自己的事务中执行。
  2. session.flush() 告诉 Hibernate 将内存状态与数据库同步,以便将 SQL 语句写入 JDBC 连接。在这里查看更多:What's the use of session.flush() in Hibernate

因此,虽然我不知道为什么示例中的实体仅在一种情况下持久化到数据库,但它可能与自动提交模式无关。

关于java - Hibernate session.flush() 即使设置了自动提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40306238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com