코드의 일부 무리를 얻었다 커밋 반영합니다. 내가 명시 적으로session.save()는 거래없이
<property name="hibernate.connection.autocommit">false</property>
다양한 절전 모드 버전으로 시도 설정하지만 여전히 문제를 얻는다. 내가 전에
try
{
tx.begin();
Person person = Person.builder().name("JAN").surname("NOWAK").age(30).build();
session.save(person);
String s = null;
if (s == null) {
throw new Exception();
}
tx.commit();
}
결과를 커밋 예외가 발생하더라도
가 같은, 사람은 내가 tx.commit 사용 여부 DB 에 추가된다() 또는 NOT.
편집 :
AUTO 내가 전에 예상대로 작동에 IDENTITY에서 엔티티를 생성 전략을 변경 한 후, DB의 변화가 커밋 한 후에 결정된다. 결과 :
Hibernate: select next_val as id_val from hibernate_sequence for update
Hibernate: update hibernate_sequence set next_val= ? where next_val=?
sout: tx.commit()
Hibernate: insert into Person (age, name, surname, id) values (?, ?, ?, ?)
그러나 사람이 왜 그렇게 설명 할 수 있을까?
* tx.commit *을 호출하지 않는 한 변경 사항이 저장되지는 않지만 여전히 거래 내에서 볼 수 있습니다 (일반적으로 DB 트랜잭션의 작동 방식) –
tx가 없어도 . commit() 또는 커밋 데이터가 DB에서 여전히 발생하기 전에 Exception을 throw 할 때. –
이것은 의심의 여지가 없습니다. https://stackoverflow.com/questions/14622962/what-is-transaction-commit-in-hibernate –