분류 전체보기 1341

Ch04. 엔티티 매핑 - 실전 예제(요구사항 분석과 기본 매핑)

요구사항 회원은 상품을 주문할 수 있다. 주문 시 여러 종류의 상품을 선택할 수 있다 기능 목록 회원 기능 회원등록 회원 조회 상품 기능 상품등록 상품 수정 상품 조회 주문 기능 상품 주문 주문내역 조회 주문 취소 도메인 모델 분석 회원과 주문의 관계: 회원은 여러 번 주문할 수 있다. (일대다) 주문과 상품의 관계: 주문할 때 여러 상품을 선택할 수 있다. 반 대로 같은 상품도 여러 번 주문될 수 있다. 주문 상품이라는 모델을 만들어서 다대다 관계를 일대다, 다대일 관계로 풀어냄 테이블 설계 & 엔티티 설계와 매핑 데이터 중심 설계의 문제점 현재 방식은 객체 설계를 테이블 설계에 맞춘 방식 테이블의 외래 키를 객체에 그대로 가져옴 객체 그래프 탐색이 불가능 참조가 없으므로 UML도 잘못됨 private..

Ch04. 엔티티 매핑 - 기본 키 매핑

@Id @GeneratedValue 기본 키 매핑 방법 직접 할당: @Id만 사용, 직접 개발자가 ID를 세팅한다. 자동 생성(@GeneratedValue) IDENTITY: 데이터베이스에 위임, MYSQL SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용, ORACLE @SequenceGenerator 필요 TABLE: 키 생성용 테이블 사용, 모든 DB에서 사용 @TableGenerator 필요 AUTO: 방언에 따라 자동 지정, 기본값 IDENTITY 전략 기본 키 생성을 데이터베이스에 위임 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용 (예: MySQL의 AUTO_ INCREMENT) JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행 AUTO_ INCRE..

Ch04. 엔티티 매핑 - 필드와 컬럼 매핑

요구사항 추가 회원은 일반 회원과 관리자로 구분해야 한다. 회원 가입일과 수정일이 있어야 한다. 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제 한이 없다. Member Entity @Entity @Table(name = "Member")//테이블 명을 적어줄수 있다 public class Member { @Id private Long id; @Column(name = "name",nullable = true,length = 10) private String username; private Integer age; @Enumerated(EnumType.STRING) //DB에는 ENUM 타입이 없기 때문에 Enumerated 어노테이션을 사용한다. private RoleType roleTy..

Ch04. 엔티티 매핑 - 데이터베이스 스키마 자동 생성

DDL을 애플리케이션 실행 시점에 자동 생성 테이블 중심 -> 객체 중심 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성 이렇게 생성된 DDL은 개발 장비에서만 사용 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬 은 후 사용 데이터베이스 스키마 자동 생성 속성 hibernate.hbm2ddl.auto 속성 값 옵션 설명 create 기존테이블 삭제 후 다시 생성 (DROP + CREATE) create-drop create와 같으나 종료시점에 테이블 DROP update 변경분만 반영(운영DB에는 사용하면 안됨) validate 엔티티와 테이블이 정상 매핑되었는지만 확인 none 사용하지 않음 update시 새로운 칼럼을 추가하면 alter로 실행이 되지만 삭제 시에는 ..

Ch04. 엔티티 매핑 - 객체와 테이블 매핑

@Entity @Entity가 붙은 클래스는 JPA가 관리, Entity라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 주의 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스 사용 X 저장할 필드에 final 사용 X @Entity 속성 정리(name) JPA에서 사용할 엔티티 이름을 지정한다. 기본값: 클래스 이름을 그대로 사용(예: Member) 같은 클래스 이름이 없으면 가급적 기본값을 사용한다 @Table @Table은 엔티티와 매핑할 테이블 지정 속성 기능 기본값 name 매핑할 테이블 이름 엔티티 이름을 사용 catalog 데이터베이스 catalog 매핑 schema 데이터..

Ch03. 영속성 관리(내부 동작 방식) - 준영속 상태

영속 -> 준영속 영속 상태의 엔티티가 영속성 콘텍스트에서 분리(detached) 영속성 컨텍스트가 제공하는 기능을 사용 못함 준영속 상태로 만드는 방법 em.detach(entity) : 특정 엔티티만 준영속 상태로 전환 em.clear() : 영속성 컨텍스트를 완전히 초기화 em.close() : 영속성 컨텍스트를 종료 Test 준영속 상태가 되면 더이상 영속성 컨택스트가 제공하는 1차 캐시, 더티 체크와 같은 기능을 사용하지 못한다.

Ch03. 영속성 관리(내부 동작 방식) - 플러시

영속성 콘텍스트의 변경내용을 데이터베이스에 반영 플러시 발생 변경 감지 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정, 삭제 쿼리) 영속성 컨텍스트를 플러시 하는 방법 em.flush() - 직접 호출 flush()를 하게 된다고 해도, 1차 캐시가 사라지는 것이 아닌 쓰기 지연 SQL 저장소에 존재하는 쿼리와, 더티 체크가 일어나는 것일 뿐이다. 트랜잭션 커밋 - 플러시 자동 호출 JPQL 쿼리 실행 - 플러시 자동 호출 JPQL 쿼리 실행시 플러시가 자동으로 호출되는 이유 중간에 JPQL을 실행하면 자동으로 Flush()가 호출된다. 플러시 모드 옵션 em.setFlushMode(FlushModeType.COMMIT) FlushMod..

Ch03. 영속성 관리(내부 동작 방식) - 영속성 컨텍스트

EntityManagerFactory에서 고객의 요청이 올 때마다 Entitymanager를 준다. Entitymanager가 DB와 커넥션을 발생시켜 연결한다. 영속성 컨택스트 JPA를 이해하는데 가장 중요한 용어 “엔티티를 영구 저장하는 환경”이라는 뜻 EntityManager.persist(entity); 엔티티 매니저를 통해서 영속성 콘텍스트에 접근 엔티티의 생명주기 비영속 (new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 JPA와 연관 없이 객체만 생성한다. 영속 (managed) 영속성 컨텍스트에 관리되는 상태 영속성 컨택스트에 영속된다고 바로 쿼리가 실행되는 것이 아니다. 쿼리는 트렌젝션이 커밋 시점에 발생된다. 준영속 (detached) , 삭제 (removed)..

LEVEL 3 : 보석쇼핑

https://programmers.co.kr/learn/courses/30/lessons/67258 코딩테스트 연습 - 보석 쇼핑 ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] programmers.co.kr 문제 풀이 투 포인터 문제이다. 투 포인터로 해결하는 것 까지는 생각했지만, 코드로 구현하는 것을 하지 못하여 결국 다른 사람 코드를 참조했다ㅠㅠ Set을 사용하여 중복을 제거한 보석을 담고(모든 보석 종류), Map을 활용하여 투 포인터 간의 간격 사이에 존재하는 보석을 종류, 개수를 파악한다. 만약 set의 크기와 map의 크기가 같다면 모든 보석이 존재 하는 거니까 left++ 만약 right가 배열의 크..

LEVEL 3 : 표 편집

https://programmers.co.kr/learn/courses/30/lessons/81303 코딩테스트 연습 - 표 편집 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO" programmers.co.kr 문제 풀이 Stack을 활용하여 푸는 문제이다(후입 선출) Z를 누를 때, 큐에서 빼주고, C를 누를 때 큐에 더해준다 고려사항 1) 테이블에서 데이터를 복구할 때, 제거 했었던 Index가 현재 선택하는 index보다 작을 경우 index를 증가시켜주어야 한다(그래야 현재 선택된 행이 그대로 선택된다) 2) 삭..