@Embeddable & @EmbeddedId복합 키를 위한 클래스를 @Embeddable 어노테이션을 사용하여 생@Embeddable @Data public class MyCompositeKey implements Serializable { private String name; private String email; }복합키를 위한 클래스 MyCompositeKeySerializable 인터페이스를 구현해야함.// 기본 생성자, getter, setter, equals, hashCode 구현해야함@Entity @Getter class MyEntity { @EmbeddedId private MyCompositeKey myCompositeKey; }@EmbeddedId 를 선언한 식별자 클래스는 기본 키를..
엔티티의 즉시 로딩을 위하 @ManyToOne 의 fetch 속성을 FetchType.EAGER 로 설정함엔티티를 조회하면 연관된 엔티티도 함께 조회된다.Member 조회시 연관된 Team 도 함께 로드된다.@Entity public class Member { // ... // 즉시 로딩으로 설정하여 Member를 로딩할 때 Team도 함께 로딩된다. @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "TEAM_ID") private Team team; // ... }// 즉시 로딩을 사용하는 경우의 실행 코드 예시 public class SomeService { public void loadMemberAndTeam(EntityManager em) { //..
member.getName() 같은 데이터가 필요한 경우 DB 조회하여 실엔티티 객체를 만듬해당 과정을 초기화하고 한다.// 프록시 객체로 MemberProxy 반환 Member member = em.getReference(Member.class, "id1"); member.getName(); // getName() 호출 시 초기화 발생// 프록시 클래스 예시 코드 class MemberProxy extends Member { Member target = null; // 진짜 엔티티 참조 변수 public String getName() { if (target == null) { // 초기화 요청, DB 조회 후 진짜 엔티티 생성하고 참조 보관 this.target = ...; // 초기화 로직 실행 } ..
영속성 컨텍스트컴퓨터 게임에서 우리가 게임 캐릭터를 움직이게 하는 게임의 세계캐릭터는 게임 안에서 움직이고, 살아있을 수 있음.프록시 객체게임에서는 특별한 종류의 아이템상자 모양인데, 상자를 열어보지 않는다면 안에 무엇이 있는지 알 수 없음준영속 상태게임의 상자를 열기 위해서는 게임의 세계 안에 있어야한다.게임의 세계와 연결이 끊어진 준영속 상태 에서는 상자를 열 수 없다.게임 캐릭터가 잠시 게임의 세계에서 나와 있는 상태준영속 상태의 상자(프록시 객체) 를 열려고 할때게임은 상자를 열 수 없다 고 오류를 보여줄 것이다.하이버네이트의 LazyInitializationException 과 같음 Uploaded by N2T
@Entity public class Member { // ... // 지연 로딩 설정: Member 조회 시 Team은 프록시 객체로 설정 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; // ... }Member 엔티티 내에서의 Team 과의 관계가 지연 로딩으로 설정되어있음.Member 조회시에 Team 은 프록시 객체로 채워짐.// 지연 로딩을 사용하는 실행 코드 예시 public class SomeService { public void loadMember(EntityManager em) { // 회원만 조회하고, 팀은 프록시 객체로 채워짐 Member member = em.find(Member...
@Entity public class Member { // ... // 지연 로딩 설정: Member 조회 시 Team은 프록시 객체로 설정 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; // ... }Member 엔티티 내에서의 Team 과의 관계가 지연 로딩으로 설정되어있음.Member 조회시에 Team 은 프록시 객체로 채워짐.// 지연 로딩을 사용하는 실행 코드 예시 public class SomeService { public void loadMember(EntityManager em) { // 회원만 조회하고, 팀은 프록시 객체로 채워짐 Member member = em.find(Member...