2016-10-28 4 views
0

Я понял, что нужно вызвать session.flush() для объектов, чей первичный ключ не является GeneratedValue, прежде чем они будут сохранены в базе данных. И я должен сделать это, хотя у меня уже автокоммитта установлена ​​на true. Вот моя конфигурация спящего режимаHibernate session.flush() хотя autocommit установлен

<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

Autocommit и session.flush() являются две разные вещи:

  1. Autocommit устанавливает режим автоматической фиксации на основной сделки JDBC. Это в основном означает, что каждый оператор SQL (SELECT, UPDATE, INSERT, DELETE, ...) выполняется в своей собственной транзакции.
  2. session.flush() сообщает Hibernate, чтобы синхронизировать состояние в памяти с базой данных, чтобы записывать операторы SQL в JDBC-соединение. Подробнее здесь: What's the use of session.flush() in Hibernate

Так что пока я не знаю, почему объекты в вашем примере получить только сохраняется в базе данных в одном случае, вероятно, не имеет ничего общего с режимом автоматической фиксации.

Смежные вопросы