스프링 @Transactional
주석에 대한 오해가 있으며 계속 유지됩니다. 나는 JPA와 Hibernate와 함께 Spring 3.1을 사용하고있다. 나는 지속성 컨텍스트에 엔티티를 추가한다는 것을 의미한다고 생각했지만 (커밋 또는 플러시 될 때까지는 어떤 쿼리도 실행하지 않음), 그리고 @Transactional
주석은 트랜잭션과 함께 메소드를 랩핑하는 것을 의미한다고 생각했습니다.Spring 트랜잭션 주석, 최대 절전 모드 및 지속성
그러나이 짧은 예제에서 실행 포인터가 지속되면 이름이 null 일 수 없으므로 예외가 발생하여 실패합니다 (db 제약 조건). 내가 setName()
및 persist()
를 교환하는 경우
import javax.persistence.EntityManager;
@PersistenceContext
private EntityManager entityManager;
@Transactional
public void test() {
Brand brand = new Brand();
entityManager.persist(brand);
brand.setName("test");
}
, 모든 작동합니다. 그러나, 나는 왜 어떤 쿼리가 메서드의 끝에 구축되고 실행될 것이라고 생각했기 때문에 다른 방법으로는 이해할 수 없다.
누군가가 설명시겠습니까?
재미 있고, 이해가 가는데, 이제는 이해할 수 있습니다. 실제로 GenerationType.IDENTITY가 있습니다. 감사 – stivlo