@PersistenceContext
@PersistenceContext
private EntityManager em;
- 엔티티 매니저( EntityManager ) 주입
- 스프링 부트를 사용하면 @PersistenceContext대신 @Autowired를 쓸 수 있다. 이유는 스프링 데이터 JPA가 지원해주기 때문이다.
@PersistenceUnit
@PersistenceUnit
private EntityManagerFactory emf;
엔티티 매니터 팩토리( EntityManagerFactory ) 주입
@Transactional
스프링에서 트랜잭션 처리를 하기위해선 DB와 관련된, 트랜잭션이 필요한 서비스 클래스 혹은 메서드에 @Transactional 어노테이션을 달아주면된다.
tx.begin();
try {
--- 메소드 실행 ---
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
- @Transactional을 붙이면 메소드를 위와 유사한 코드로 감싸서 실행된다.
@Service
@Transactional(readOnly = true)
public class MemberService {
@Transactional //join()은 readOnly = false
public Long join(Member member) { ... }
...
}
- 트랜잭션, 영속성 컨텍스트
- 클래스 레벨에 선언하면 클래스 내부의 모든 메소드에 적용된다. 추가적으로 메소드에 적용한 것이 우선순위를 가진다.(구체적인 것이 우선!)
- readOnly=true : 데이터의 변경이 없는 읽기 전용 메서드에 사용, 영속성 컨텍스트를 플러시 하지 않 으므로 약간의 성능 향상(읽기 전용에는 다 적용)
- 데이터베이스 드라이버가 지원하면 DB에서 성능 향상
테스트 코드에서 쓰면 DB로부터 데이터를 가져오고, 테스트가 끝나면 DB를 원래대로 돌려놓는다. (자동으로 롤백)
@Rollback(false): 테스트 코드 실행 중에 쿼리를 보낸 것들을 테스트 완료 후에도 롤백하지 않게한다.
@NoArgsConstructor
- 파라미터가 없는 필드를 주입해주는 생성자 생성
- @NoArgsConstructor(AccessLevel.PROTECTED) : 생성자의 접근 제어를 PROTECTED로 설정
@AllArgsConstructor
@AllArgsConstructor
public class test {
private int age;
}
- 모든 필드를 주입해주는 생성자 생성
@RequiredArgsConstructor
@AllArgsConstructor
public class test {
private final int age;
}
- final 필드만 주입해주는 생성자 생성
@Test(expected = IllegalStateException.class))
- IllegalStateException 예외가 터지면 테스트 성공
Test에 resources 생성 후 yml 생성하면 test의 yml을 따른다.
@NotEmpty(message = "xxx")
@NotEmpty(message = "회원 이름은 필수 입니다.")
private String name;
- @NotEmpty는 null 과 "" 를 허용하지 않는다.
@NotBlank
@NotBlank(message = "회원 이름은 필수 입니다.")
private String name;
- @NotBlank는 null 과 "" 과 " "모두 허용하지 않는다.
public String a (@Valid @ModelAttribute MemberForm memberForm, BindingResult result) {}
- @Valid 뒤에 BindingResult 객체가 있으면 페이지가 튕기지 않고 오류 내용이 BindingResult에 담겨 코드가 정상적으로 실행된다.
- if(result.hasErrors()) {} 를 작성하여 오류 발생 시 방안을 세울 수 있다.
'JPA' 카테고리의 다른 글
batch_size대로 in쿼리 개수가 안 나가는 이유! (2) | 2023.05.14 |
---|---|
[JPA] 양방향 연관관계 순환 참조 문제 및 해결방법 (0) | 2022.12.22 |
객체지향 쿼리 언어 (0) | 2022.07.27 |
값 타입 (0) | 2022.07.27 |
고급 매핑 (0) | 2022.07.26 |