개발중 (617) 썸네일형 리스트형 JPA - 값 타입 컬렉션 값 타입을 하나 이상 저장하려면 컬렉션에 보관하고 아래 두 개의 어노테이션을 사용하면 된다. @ElementCollection @CollectionTable ✅ Member 더보기 package jpabook.model.entity; import javax.persistence.*; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @Entity public class Member { @Id @GeneratedValue private Long id; @Embedded private Address homeAddress; @ElementCollection @CollectionTabl.. Java 객체/ 기본값 타입의 비교 🟣 값 타입의 비교 int a, b 는 같다고 표현한다 int a = 10; int b = 10; Binsoo a, b 는 같다고 표현한다 Binsoo a = new Binsoo( "java", "01011112222" ) Binsoo b = new Binsoo( "java", "01011112222" ) 🟣 자바가 제공하는 객체 비교는 두 가지이다. ✅ 동등성 비교 동등성 : Equivalence 인스턴스 값을 비교 equals() 사용 ✅ 동일성 비교 동일성 : identity 인스턴스 참조 값을 비교 == 사용 Binsoo 객체 값 타입을 a == b 로 동일성 비교를 하면 둘은 서로 다른 인스턴스이므로 결과는 거짓이다. 하지만 이것은 기대한 결과가 아니다. 값 타입은 비록 인스턴스가 달라도 그 안.. mybatis / 존재하지 않는 테이블명 에러 잡기 java.sql.SQLSyntaxErrorException: Table 'BINSOO_TABLE_1103' doesn't exist 지금 하고 있는 프로젝트 중에서 관리하는 데이터가 너무 많아서 유동적으로 SEQ 마다 테이블이 생성되는 구조를 가진 프로젝트를 짜고 있었다. SELECT * FROM BINSOO_TABLE_#{SEQ} 이렇게 연결이 되어야 하는데 만약에 존재하지 않는 테이블명이라면 ? 물론 위에 처럼 로직을 세우려면 꼭 SEQ 마다 TABLE 이 존재해야겠지만 정말 혹시나 하는 상황에는 아래처럼 에러 메세지를 이용하는 방법도 존재한다. public List selectBinsooData( BinsooVo vo ) { List voList = null; try { voList = SqlSes.. JPA - 즉시 로딩과 지연 로딩 즉시 로딩과 지연 로딩 프록시 객체는 주로 연관된 엔티티를 지연 로딩 할 때 사용한다. Member member = em.find( Member.class, "binsoo" ) - 객체 그래프 탐색 Team ream = member.getTeam() - 팀 엔티티 사용 team.getName() 회원 엔티티를 조회할 때 연관된 팀 엔티티도 함께 DB 에서 조회하는 것이 좋을까 ? 아니면 회원 엔티티만 조회해두고 팀 엔티티는 실제 사용하는 시점에 DB 에서 조회하는 것이 좋을까 ? 즉시 로딩 - EAGER LOADING 엔티티를 조회할 때 연관된 엔티티도 함께 조회한다. 하이버네이트는 가능하면 SQL 조인을 사용해서 한 번에 조회한다. 설정 방법 @ManyToOne( fetch = FetchType.EAG.. JPA / 프록시 알아보기 프록시 ? 객체는 객체 그래프로 연관된 객체들을 탐색한다. 그런데 객체가 DB 에 저장되어 있으므로 연관된 객체를 마음껏 탐색 하기는 어렵다. JPA 구현체들은 이 문제를 해결하려고 프록시라는 기술을 사용한다. 프록시를 사용하면 연관된 객체를 처음부터 DB에서 조회하는 것이 아니라 실제 사용하는 시점에 DB를 조회할 수 있다. 하지만 자주 함께 사용하는 객체들을 조인을 사용해서 함께 지원하는 것이 효과적이다. ✅ 프록시 객체? 지연로딩 기능을 사용하려면 실제 엔티티 객체 대신에 DB 조회를 지연할 수 있는 가짜 객체가 필요한데 이것을 프록시 객체라고 한다. ✅ 프록시 기초 JPA 에서 식별자로 엔티티 하나를 조회할 때는 EntityManager.find() 를 사용한다. 이 메소드는 영속성 컨텍스트에 엔.. 식별 관계와 비식별 관계 구분 식별 관계 / 비식별 관계 매번 많이 사용 되는데 확실한 개념은 매번 짚고 가려 하지만 매번 헷갈리는 식별 관계와 비식별 관계 제대로 정리하기 데이터베이스 테이블 사이에 관계는 외래 키가 기본 키에 포함 되는지 여부에 따라 식별 관계와 비식별 관계로 구분한다. DB TABLE을 설계할 때는 식별관계 OR 비식별관계 하나를 택해야 한다. 최근에는 비식별 관계를 주로 사용하고 꼭 필요한 곳에만 식별 관계를 사용하는 추세이다. JPA 는 식별관계와 비식별 관계 모두 지원한다. ✅ 식별 관계 식별 관계는 부모 테이블의 기본키를 내려 받아서 자식 테이블의 기본키 + 외래키를 사용하는 관계이다. ✅ 비식별 관계 비식별 관계는 부모 테이블의 기본키를 받아서 자식 테이블의 외래 키로만 사용하는 관계이다. - 필수적 비.. JPA - 어노테이션 정리 JPA 책을 읽다가 기록하고 내 것으로 만들고 싶은 부분 기록 😏 어노테이션 @JoinColumn 외래키를 매핑 할 떄 사용한다. @Column 객체 필드를 테이블 컬럼에 매핑 한다. @Enumerated 자바의 enum 타입을 매핑할 때 사용. @Temporal 날짜 타입을 매핑할 때 사용. @Lob 데이터 베이스 BLOB, CLOB 타입과 매핑한다. 더보기 @LOB 에는 지정할 수 있는 속성이 없다. 대신에 매핑하는 필드 타입이 문자면 CLOB 으로 매핑하고 나머지는 BLOB 으로 매핑한다. - CLOB : String, char[], java.sql.CLOB - BLOB : byte[], java.sql.BLOB @Transient 이필드는 매핑하지 않는다. 따라서 데이터 베이스에 저장하지 않고 조.. JPA / 객체 간 연관관계 매핑 - 기록 JPA 책을 읽다가 기록하고 내 것으로 만들고 싶은 부분 기록 ✅ DB Table 구성 CREATE TABLE MEMBER ( MEMBER_ID VARCHAR(255) NOT NULL , TEAM_ID VARCHAR(255) , USERNAME VARCHAR(255) , PRIMARY KEY (MEMBER_ID) ) ; CREATE TABLE TEAM ( TEAM_ID VARCHAR(255) NOT NULL , NAME VARCHAR(255) , PRIMARY KEY (TEAM_ID) ) ; ALTER TABLE MEMBER ADD CONSTRAINT FK_MEMBER_TEAM FOREIGN KEY (TEAM_ID) REFERENCES TEAM ; ✅ Class - Member class Member {.. 이전 1 ··· 39 40 41 42 43 44 45 ··· 78 다음