본문 바로가기

프레임워크/JPA8

[JPA] Hint & Lock 쿼리 힌트(JPA Hint) 사용하는 이유 영속성 컨텍스트가 Dirty Checking(변경 감지)을 해서 트랜잭션이 끝나는 시점에 자동으로 엔티티를 업데이트 하는데 이럴 경우 의도하지 않아도 업데이트 되는 걸 방지 하기 위해서 사용한다. 쿼리 힌트 사용 @QueryHints(value = @QueryHint(name = "org.hibernate.readOnly", value = "true")) Member findReadOnlyByUsername(String username); 쿼리 힌트 사용 확인 @Test public void queryHint() throws Exception { //given memberRepository.save(new Member("member1", 10)); em.flus.. 2024. 2. 23.
[JPA] Entity Graph Entity Graph 쿼리 메서드마다 연관 관계의 fetch모드를 유연하게 설정할 수 있는 기능을 제공해준다. 끝이 One으로 끝나는 연관관계는 기본값이 EAGER모드이고, 끝이 Many로 끝나는 연관관계는 기본값이 LAZY이다.(임의로 모드를 바꿀 수 있다.) @Entity @Table(name = "account") @Getter @NoArgsConstructor public class Account { @ManyToMany @JoinTable( // JoinTable은 테이블과 테이블 사이에 별도의 조인 테이블을 만들어 양 테이블간의 연관관계를 설정 하는 방법 name = "account_authority", joinColumns = {@JoinColumn(name = "account_id", r.. 2023. 10. 24.
[JPA] 임베디드 타입 임베디드 타입 임베디드 타입 사용법 @Embeddable: 값 타입을 정의하는 곳에 표시 @Embedded: 값 타입을 사용하는 곳에 표시 기본 생성자 필수 임베디드를 사용하면 재사용이 가능하고 Period.isWork()처럼 해당 값 타입만 사용하는 의미 있는 메소 드를 만들 수 있습니다. @AttributeOverride: 속성 재정의 한 엔티티에서 같은 값 타입을 사용하려면 @AttributeOverrides, @AttributeOverride를 사용해서 컬러 명 속성을 재정의 합니다. 2023. 5. 1.
[JPA] 프록시와 연관관계(즉시로딩, 지연로딩, 영속성 전이) 프록시 객체의 초기화 Member를 조회할 때 Team도 함께 조회되는걸 막기 위해서 지연로딩을 사용한다. 이유는 쓸때없는 join을 해서 쿼리 조회 시간을 낭비 할수도 있기 때문입니다. 지연로딩 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @ManyToOne(fetch = FetchType.LAZY) //** @JoinColumn(name = "TEAM_ID") private Team team; .. } 지연로딩을 사용할 경우 실제 team을 사용하는 시점에서만 쿼리를 사용하게 됩니다. Team team = member.getTeam(); te.. 2023. 4. 29.