전체 글
연관관계 매핑
연관관계가 필요한 이유? - 객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다. 객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. -테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다. -객체는 참조를 사용해서 연관된 객체를 찾는다. -테이블과 객체 사이에는 이런 큰 간격이 있다. 단방향 연관관계 위의 연관관계와 같이 Member는 Teamid의 객체를 가지고 있다.(객체 참조) MEMBER 테이블은 TEAM_ID를 FK로 가지고 있다. (N:1) @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "US..
엔티티 매핑
객체와 테이블 매핑 : @Entity, @Table @Entity @Table(name = "MBR") public class Member { @Entity가 붙은 클래스는 JPA가 관리하는 엔티티이며, JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수이다. @Table은 엔티티와 매핑할 테이블을 지정하는 어노테이션이다 위의 코드와 같이 name을 지정할 수 있다. @Entity의 default name은 클래스명과 같다. 주의 -기본 생성자 필수(public, protected) -final클래스, enum, inteface, inner 클래스 사용 x 저장할 필드에 final 사용 x - 필드와 컬럼 매핑 : @Column - 기본 키 매핑 : @Id - 연관관계 매핑 : @ManyToO..
flush, 준영속 상태
플러시(flush)란? 영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 것이다. 데이터베이스 commit시점에서 플러시가 일어나게 된다. 즉 영속성컨텍스트와 데이터베이스를 맞추는 것이다. 플러시 발생 -변경 감지 -수정된 엔티티 쓰기 지연 sql저장소에 등록 영속성 컨텍스트를 플러시 하는 방법 em.flush(직접 호출) 트랜잭션 commit - 자동호출 jpql쿼리 실행 -자동호출 예를 들자면 아래 코드와 같다. Member member = new Member(20L, "member20"); em.persist(member); em.flush(); tx.commit(); 위의 코드와 같이 flush()를 호출하여 직접 쿼리를 보내고 commit을 하였다. 플러시는 영속성 콘텍스트를 비우는 것이 아니..
영속성 컨텍스트, 1차캐시, 변경감지
영속성 컨텍스트란? - "엔티티를 영구 저장하는 환경"이라는 뜻이다. ex) em.persist(member) EntityManagerFactory를 통해 고객의 요청이 올 때마다 EntityManager를 생성하고, 새로운 고객 요청 시 또 다른 엔티티 매니저를 생성하고 엔티티 매니저는 내부적으로 데이터베이스 커넥션을 사용하여 DB를 사용하게 된다. - EntityManager는 DB에 저장하는 것이 아닌 엔티티 매니저를 통해 영속성 컨텍스트에 접근하는 것이다. - 실제로 DB에 쿼리가 날아가는 시점은 persist시점이 아닌 트랜잭션이 commit 된 시점이다. //비영속 Member member = new Member(); member.setId(10L); member.setName("member1..
ORM-JPA
JPA란? Java Persistence API의 약자로 자바 진영의 ORM 기술 표준이다. 그렇다면 ORM은 무엇일까?? - Object-relational mapping(객체 관계 매핑) -관계형 데이터베이스는 관계형 데이터베이스대로 설계 -ORM 프레임워크가 중간에서 매핑 JPA는 애플리케이션과 JDBC 사이에서 동작한다. 먼저 maven으로 JPA persistence.xml을 다음과 같이 설정한다. 이 옵션에서 살펴볼 것은 하이버네이트는 다양한 데이터베이스의 언어를 지원한다. 따라서 hibernate.dialect의 value의 데이터베이스를 바꾸어주면 알아서 바뀐 데이터 베이스의 언어로 매핑된다. JPA 구동 방식 JPA에서 Persistence는 META-INF/persistence.xml을..
MAC M1 MySQL 개발 환경 구축
Homebrew 설치 먼저 MySQL을 설치하기 전에 Homebrew가 설치되어있는지 확인하자 which brew 먼저 iterm2나 터미널에 들어가 위와 같이 입력하면 Homebrew가 설치되어있지 않다면 brew not found가 출력됩니다. Homebrew는 macOS를 사용하는 프로그래머들에게는 손쉽게 다양한 패키지를 설치할 수 있게 도와주는 필수적인 프로그램이다. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" Homebrew가 설치되어있지 않다면 위와 같이 입력하면 애플 실리콘을 지원하는 Homebrew설치가 진행된다. 중간에 macOS 계정 패스워드나 엔터를 입력해야 ..