
조인 SQL의 조인과 양상은 비슷하나 얘는 엔티티 중심으로 동작한다. 약간 객체 스타일로 조인 문법이 나간다. 연관있는 것을 . 으로 표현한다. 간단히 복기하고 넘어가면 내부조인은 값이 없으면 그대로 안 나오지만, 외부조인은 한쪽의 값이라도 있으면 없는 쪽은 빠진 채로 출력됨. 예제 Member에 Team getter, setter 먼저 추가 후, Team에도 Member의 getter, setter 추가 후 작업 Member에 Lazy로 전략 명기 @ManyToOne(fetch = FetchType.LAZY) // 중요. @JoinColumn(name = "TEAM_ID") private Team team; Member - 연관관계 편의 메서드 추가 public void changeTeam(Team t..

페이징 API order by 가 꼭 들어가야 Sorting이 되면서 페이징이 제대로 되는지 확인 가능하므로 중요하다. 예제 일단 귀찮으니 Member에 toString() 만들고 시작. @Override public String toString() { return "Member{" + "id=" + id + ", username='" + username + '\'' + ", age=" + age + '}'; } JpaMain public class JpqlMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em..

프로젝션 1. SELECT m FROM MEMBER m -> 엔티티 프로젝션 JpqlMain public class JpqlMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Member member = new Member(); member.setUsername("member1"); member.setAge(10); em.persist(member..

JPQL 소개 기본 예제 새로운 프로젝트로 진행 초기 세팅 값 Address @Embeddable public class Address { private String city; private String street; private String zipcode; public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getZipcode() { return zipcode; } p..

JPA는 다양한 쿼리 방법을 지원 JPQL 소개 JPQL 예시 JPAMAIN public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { List result = em.createQuery( "select m from Member m where m.username like '%kim% '", Member.class) .getRe..

참고 equals() and hashcode() 구현 시 "Use getters during code generation" 옵션 사용하세요. 이 옵션을 선택하면 getter를 호출한다. 이걸 선택하지 않으면 필드에 직접 접근함. 필드에 직접 접근하면 문제 발생 무엇이? Proxy일 때, 계산이 안 된다. 그래서 JPA에서는 메서드를 통해서 값을 호출하도록 코드를 구현하는게 좋다. 그게 안전하다. 예제 6. 값 타입 매핑 구조도 1. Address 테이블 생성 @Embeddable public class Address { private String city; private String street; private String zipcode; public String getCity() { return cit..

미리 결론 스포, 값 타입 컬렉션은 언제 쓰는가? => 매우 단순한 상황일때만 쓰자!(라고 하기도 좀 그렇고, 쓰는 걸 고려하자 정도가 맞다.) => 대부분 다 엔티티로 만들어서 사용한다. 값 타입 컬렉션 값 타입을 컬렉션에 담아서 쓰는 것 그림 예제 Member 클래스 변경 @Entity @NoArgsConstructor public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; @Embedded private Address address; @ElementCollection @CollectionTable(name =..

값 타입의 비교 예시 public class ValueMain { public static void main(String[] args) { int a = 10; int b = 10; System.out.println("a == b : " + (a==b)); // true 출력 Address address1 = new Address("seoul", "garosugil", "10000"); Address address2 = new Address("seoul", "garosugil", "10000"); System.out.println("address1 == address2 : " + (address1==address2)); } } 실행 결과 값 타입의 비교 - 동일성 비교와 동등성 비교 그 전에 public..