JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. Mapped Superclass 매핑 정보 상속 테이블과 매핑하지 않고 부모 클래스를 상속받는 자식 클래스에게 매핑 정보만 제공한다. 추상 클래스와 비슷하며 @MappedSuperclass는 실제 테이블과 매핑 되지 않는다. 객체에 공통 속성이 존재하는 필드를 객체 입장에서 속성만 상속 받아서 사용하고 싶을 때 사용한다. 물론 DB와는 별개이다. @MappedSuperclass 매핑 BaseEntity.class @MappedSuperclass public class BaseEntity { private String createdBy; private LocalDateTime create..
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 상속 관계 매핑 관계형 데이터베이스에는 상속 관계라는 개념이 존재하지 않는다. 대신 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 그나마 유사하다. 상속 관계를 매핑 : 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입 서브타입 논리 모델 -> 물리 모델로 구현 조인 전략 각각의 테이블로 만들어 JOIN으로 데이터를 뽑아오는 방식이다. ITEM이라는 상위 테이블을 만들고, ALBUM에 관한 데이터를 가져오고 싶으면 ITEM과 ALBUM을 JOIN하여 데이터를 가져온다. 장점 테이블 정규화가 가장 잘 되어있다. 외래키 참조 무결성 제약조건 활용이 가능하다. 저장공간..
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. JPA 다양한 연관관계 매핑 연관관계 매핑시 고려사항 다중성 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany 다대다 관계는 실무에서 사용하지 않는다. 대부분 다대일 > 일대다 > 일대일 순으로 실무에서 자주 사용한다. 단방향, 양방향 테이블 외래키 하나로 양쪽 조인 가능 -> 사실 방향이라는 개념이 없다. 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A->B, B->A 처럼 참..
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 양방향 연관관계와 연관관계의 주인 - 기본 JPA 연관관계 매핑 - 단방향 연관관계 JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 단방향 연관관계 예제 시나리오 회원과 팀이 존재한다. 회원은 하나의 팀에만 소 devhan.tistory.com 이전 글에서 배운 단방향 연관관계와 양방향 연관관계의 차이점은 아래와 같다. // Member 객체로 Team을 가져올 수 있다. Member findMember = em.find(Member.class, member.getId()); Team findTeam = findMe..
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 단방향 연관관계 예제 시나리오 회원과 팀이 존재한다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계이다. 객체를 테이블화한 모델링 객체 클래스 생성(Member) @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; @Column(name = "TEAM_ID") private Long teamId; ...getter/setter 생략 } 객체 클래스 생성(Te..
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 요구사항 분석과 기본 매핑 요구사항 분석 회원은 상품을 주문할 수 있다. 주문 시 여러 종류의 상품을 선택할 수 있다. 도메인 모델 분석 회원 - 주문 : 회원은 여러 번 주문할 수 있다 - 일대다 주문 - 상품 : 주문할 때 여러 상품을 선택할 수 있고, 같은 상품도 여러 번 주문될 수 있다. 주문 상품이라는 모델을 만들어서 다대다 관계를 일대다, 다대일 관계로 만든다. 테이블 설계 엔티티 설계 엔티티 클래스 생성(실습) Member @Entity public class Member { @Id @GeneratedValue @Column(name="MEMBER_ID") private ..
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 기본 키 매핑 기본키의 경우엔 직접 할당과 자동생성 방법이 있다. 직접 할당은 여태 써온 @Id 애노테이션을 사용하면 된다. 직접 할당 @Id // Member.class @Id private Long id; // 실행 클래스 ...생략 Member member = new Member(); member.setId(1000L); // 기본키 직접 할당 member.setUsername("B"); ...생략 이렇게 개발자가 직접 PK 값을 할당해주는 경우 @Id만 사용하면 된다. 자동 생성(@GeneratedValue) 자동 생성의 경우 IDENTITY, SEQUENCE, TABLE, AU..
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 필드와 컬럼 매핑 @Column 컬럼을 매핑할 때 사용한다. name 속성 필드의 이름과 DB 테이블 컬럼의 이름이 다를 시 사용된다. 필드와 매핑할 테이블의 컬럼 이름을 적어주면 된다. 만약 필드의 이름과 매핑 할 DB 컬럼의 이름이 같으면 생략하면 된다. @Column(name = "name") private String username; insertable, updatable 속성 해당 필드에 변경이 생겼을 때 이 컬럼의 변경된 내용을 INSERT 혹은 UPDATE 할거냐는 속성이다. 즉 등록, 변경 가능 여부를 설정하며 기본값은 TRUE이다. @Column(name = "name..
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 객체와 테이블 매핑 대표적인 엔티티 매핑 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn @Entity @Entity가 붙은 클래스는 JPA가 관리하며 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수이다. 주의! 기본 생성자가 필수(접근제한자는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스 사용 불가 저장할 필드에 final 사용 불가 JPA는 엔티티 객체를 생성할 ..
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 준영속 상태 영속 상태가 되는 방법 em.persist() - 저장 find() - 조회 준영속 준영속 상태란 영속성 컨텍스트가 관리하는 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(detached)된 것을 준영속 상태라 한다. 준영속 상태가 되면 영속성 컨텍스트가 제공하는 기능(변경 감지 등..)을 사용하지 못한다. 준영속 상태로 만드는 방법 em.detach(entity) : 특정 엔티티만 준영속 상태로 전환 // 영속 Member member = em.find(Member.class, 150L); member.setName("AAAAA"); // 준영속 em.detach(memb..
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 플러시(flush) 플러시란 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 것을 말한다. Transaction commit이 일어날 때 flush가 동작하면서 쓰기 지연 SQL 저장소에 담아놨던 SQL들이 DB에 전달된다. 그러면서 영속성 컨텍스트의 변경 사항들이 DB에 동기화된다. 플러시 동작 과정 변경 감지(Dirty Checking) 수정된 Entity를 쓰기 지연 SQL 저장소에 등록 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송(등록, 수정, 삭제 쿼리) ! flush == commit()이 아니다. flush -> commit()이 맞는 표현이다. 영속성 컨텍스..
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. Hello JPA 프로젝트 생성 Language : JAVA 8 이상(8 권장) DB : H2 Database - http://www.h2database.com/ 최고의 실습용 DB 가벼움 (1.5M) 웹용 쿼리툴 제공 MySQL, Oracle DB 시뮬레이션 기능 시퀀스, AUTO INCREMENT 기능 지원 Build Tool : Maven 자바 라이브러리, 빌드 관리 라이브러리 자동 다운로드 및 의존성 관리 최근에는 그레이들(Gradle)을 많이 사용하지만 강의에서는 아직도 Maven을 많이 사용하기 때문에 Maven으로 진행 IntelliJ에서 프로젝트 생성 pom.xml dep..
김영한님 강의를 듣다가 messages.properties 파일을 오픈할 일이 생겼는데 아니 한글이어야 할 내용들이 이상한 외계어로 바뀌어져 있었다. 저번에 message 관련 에러가 발생했을 때 해결 방법은 아니었지만 수 많은 해결 방법 중 하나였었는데 혹시 그 방법을 사용하면 될까 해서 해봤더니 해결이 되었다! [SpringBoot] No message found under code 'hello' for locale 'null'. 에러 해결 김영한님의 강의를 열심히 듣는 도중, 다음과 같은 에러가 발생했다. org.springframework.context.NoSuchMessageException: No message found under code 'hello' for locale 'null'. at..
김영한님의 강의를 열심히 듣는 도중, 다음과 같은 에러가 발생했다. org.springframework.context.NoSuchMessageException: No message found under code 'hello' for locale 'null'. at org.springframework.context.support.DelegatingMessageSource.getMessage(DelegatingMessageSource.java:76) ... 생략 영알못이지만 대략 파악해보자면 해당 메시지를 찾을 수 없어 뜨는 에러 같아서 application.properties 설정을 다시 확인했다. spring.messages.basename=message --> 변경 spring.messages.base..
React 게시글은 대부분 인프런의 '한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지' 강의를 기반으로 내용을 정리했습니다. React에서 리스트 사용하기 1 - 리스트 렌더링 (조회) 바로 전에 만든 다이어리는 저장 버튼은 있지만 실제로 DB에 저장하거나 하진 않았다. 이번에는 배열을 이용하여 React에서 LIST를 렌더링하고 개별적인 컴포넌트로 만들어보자. (일반적으로 리액트를 사용하면 배열로 피드, 게시글, 리스트를 표시하는데 자주 사용한다.) 저장된 리스트를 보여줄 DiaryList.js를 생성한다. const DiaryList = () => { return ( 일기 리스트 ) }; export default DiaryList; App.js import './App.css'..