응답 및 양식의 HTML 템플리트를 저장할 두 개의 테이블이 있습니다. 테이블 응답에는 html_templates 테이블의 기본 키를 참조하는 외래 키가 있습니다. 응답 테이블에 레코드를 추가하려고하면 문제가 발생합니다.레코드가 저장되지 않았지만 데이터베이스의 자동 증가 ID가 증가되었습니다.
//session opened
Answers answers = new Answers();
answers.setAnswer("answer...");
//there is a record in getHtmlTemplates with 4 as an id
answers.setHtmlTemplates(getHtmlTemplates(4));
session.save(answers);
프로그램은 warrings없이 실행되지만 DB (MySql)에는 레코드가 없습니다. answers
에 레코드를 수동으로 추가 할 때 id가 두 개 이상 증가합니다. 실제로 모든 작업이 트랜잭션 내에있을 때 레코드가 추가됩니다. 어떻게 된 거예요? DB 데이터베이스가이 레코드를 삭제 한 것 같습니다.
아마도 맞을 것입니다. 하지만 나는 어떤 거래도 시작하지 않은 상황을 생각하고 있었다. 세션을 열었을 때만 세션에 새 객체를 저장 한 다음 session.flush()를 호출했습니다. 일하지 않았어. 내가 모든 트랜잭션을 사용할 때 말했듯이, 트랜잭션을 시작해야합니까? 이 방법은 외래 키가없는 테이블에서 작동하기 때문에 SQL 쿼리를 두 번 이상 실행할 때 (데이터베이스의 개체에서 기본 키를 검색 할 때) 트랜잭션을 시작하고 커밋해야합니다. – Damian
Hibernate는 트랜잭션에서 모든 것을 처리한다. 위의 예에서 트랜잭션은 암시 적으로 시작되지만 절대 커밋하지 않으므로 데이터가 없습니다. – Mac