我意识到需要为主键不是GeneratedValue的实体调用session.flush(),然后才能将它们保存在数据库中。即使我已经将autocommit设置为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
答案 0 :(得分:1)
Autocommit和session.flush()
是两回事:
session.flush()
告诉Hibernate将内存状态与数据库同步,以便将SQL语句写入JDBC连接。点击此处:What's the use of session.flush() in Hibernate 因此,虽然我不知道为什么示例中的实体仅在一种情况下持久保存到数据库,但它可能与自动提交模式无关。