account ID is 0 and for returned account ID is 1
가 CrudReporsitory.save 내지() 자바 독 :
주어진 엔티티를 저장 여기
의 결과이다 : 여기 는 시험 번호이다. 저장 조작으로 엔티티 인스턴스가 완전히 변경되었을 수 있으므로 리턴 된 인스턴스를 추가 조작에 사용하십시오. 우리가 원래 대신 반환 된 인스턴스를 사용해야 할 이유public class JpaAccountRepositoryTest extends JpaRepositoryTest { @Inject private AccountRepository accountRepository; @Inject private Account account; @Test @Transactional public void createAccount() { Account returnedAccount = accountRepository.save(account); System.out.printf("account ID is %d and for returned account ID is %d\n", account.getId(), returnedAccount.getId()); } }
@Transactional public T save(T entity) { if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity); } }
그래서, 질문은 :
여기에 스프링 데이터 JPA에서 SimpleJpaRepository의 실제 코드는? (예, 우리는해야만합니다. 그렇지 않으면 분리 된 인스턴스로 작업을 계속합니다. 이유는 무엇입니까?)
원래의 EntityManager.persist() 메서드는 void를 반환하므로 인스턴스가 지속성 컨텍스트에 연결됩니다. 어떤 프록시 마술은 저장소를 저장하기 위해 계정을 전달하면서 발생합니까? Spring Data JPA 프로젝트의 아키텍처 제한 사항입니까?
새로운 엔티티에 대한 반품 결과를 사용하지 않는 것이 안전할까요? – danidacar
반환 된 Object 상태에 대한 설명서는 어디에 있습니까? 즉, 업데이트 된 필드 (타임 스탬프)를 반환하는 경우가 있습니다. 필드가 DB에서 업데이트되지 않는 경우가 있습니다. – mmcrae