일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- cartograhper
- Hibernate
- 논문
- MySQL
- 네트워크
- Jetson
- 이펙티브자바
- 장애물인식
- 운영체제
- 알고리즘
- 자바ORM표준JPA프로그래밍
- 배달로봇
- 영속성컨텍스트
- persistance context
- DeepLearning
- 자율주행
- 딥러닝
- 파이썬
- 디자인패턴
- 자바
- 프로그래머스
- Java
- Spring Batch
- 아두이노
- 논문리뷰
- Database
- 포인트클라우드
- 자료구조
- JPA
- Python
- Today
- Total
목록자바ORM표준JPA프로그래밍 (10)
제리 devlog
일대일 매핑(1:1) 일대일 관계는 양쪽이 서로 하나의 관계만 가진다. 예를 들어 회원은 하나의 사물함만 사용하고 사물함도 하나의 회원에 의해서만 사용된다. 일대일 관계는 그 반대도 일대일 관계이다. 테이블 관계에서 일대다, 다대일은 항상 다(N)쪽이 외래 키를 가졌다. 반면에 일대일 관계는 주 테이블이나 대상 테이블 둘 중 어느 곳이나 외래 키를 가질 수 있다. 주 테이블에 외래키 주 객체가 대상 객체를 참조하는 것처럼 주 테이블에 외래 키를 설정한다. 외래 키를 객체 참조와 비슷하게 할 수 있어 객체지향 개발자들이 선호한다. 주 테이블이 외래 키를 가지고 있으므로 주 테이블만 확인해도 대상 테이블과 연관 관계를 알 수 있다. 대상 테이블에 외래 키 전통적인 데이터베이스 개발자들은 보통 대상 테이블에 ..
엔티티의 연관관계를 매핑할 때는 3가지를 고려해야한다. 다중성 단방향, 양방향 연관관계의 주인 먼저 두 엔티티가 일대일 관계일지 일대다 관계인지 다중성을 고려한다. 다음으로, 두 엔티티가 단방향과 양방향중 어떤 방식으로 참조하는지 결정한다. 마지막으로 양방향 관계라면 연관관계의 주인을 결정한다. 다중성 다대일(@ManyToOne) 일대다(@OneToMany) 일대일(@OneToOne) 다대다(@ManyToMany) 보통 다대일과 일대다 관계를 많이 사용하고 다대다 관계는 실무에서 거의 사용하지 않는다. 단방향, 양방향 테이블은 외래 키 하나로 조인을 하면 양방향으로 쿼리가 가능해서 방향의 개념이 없다. 반면, 객체는 참조용 필드가 있어 방향이 존재한다. 객체 관계에서 한 쪽만 참조하는 것을 단방향 관계라..
객체의 참조는 단방향이다. 반면 테이블에서의 join은 어느쪽이나 가능한다. member와 team의 관계는 다대일이다. 하나의 team에는 여러 member가 소속될 수 있다. 그렇기에 team의 객체에서는 컬렉션을 사용한다. 테이블의 연관관계는 team의 외래 키 하나로 양방향으로 조회할 수 있다. 양방향 객체의 연관관계를 만든다고해서 테이블에 새로 추가할 것은 없다. 양방향 연관관계 매핑 @Entity public class Member { @Id @Column(name = "MEMBER_ID") private String id; private String username; @ManyToOne @JoinColumn(name="TEAM_ID"); private Team team; //연관관계 설정 p..
객체의 참조와 테이블의 외래 키를 매핑을 어떻게 할까? 방향 : 테이블과 달리 객체는 참조의 방향이 존재한다. 다중성 : 1:N, N:1, 1:1, N:M의 관계가 있다. 연관관계의 주인 : 객체를 양방향 연관 관계로 만드려면 연관관계의 주인을 정해야한다. 단방향 연관관계 위와 같이 객체의 연관관계를 테이블과 매핑하기 위해서는 아래와 같이 코드를 작성한다. @Entity public class Member { @Id @Column(name = "MEMBER_ID") private String id; private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; public void setTeam(Team team){..
객체와 테이블 매핑 : @Entity, @Table 기본 키 매핑 : @Id 필드와 컬럼 매핑 : @Column 연관 관계 매핑 : @ManyToOne, @JoinColumn @Entity 테이블과 매핑할 클래스에 붙인다. @Entity가 붙은 클래스는 JPA가 관리하며 엔티티라 부른다. @Entity(name = "")속성을 사용하여 엔티티의 이름을 지정할 수 있다. 기본 값은 클래스 이름이다. @Entity를 적용 시 주의사항은 아래와 같다. * 기본 생성자는 필수(파라미터가 없는 public, protected생성자) * final 클래스, enum, interface, inner클래스는 사용불가 * 저장할 필드에 final을 사용하면 안 된다. @Table 엔티티와 매핑할 테이블을 지정한다. 생략..
영속성 컨텍스트란? 엔티티를 영구 저장하는 환경이라는 뜻이다. 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 저장한다. em.persist(member); 이 코드는 단순히 회원 엔티티를 저장하는 것이 아니다. persist()는 엔티티 매니저를 사용해서 엔티티를 영속성 컨텍스트에 저장한다. 영속성의 생명주기에는 4가지가 있다. 1. 비영속 엔티티의 객체를 생성한 상태이며 아직 저장하지 않았다. 따라서 영속성 컨텍스트나 데이터베이스에 관련이 없는 비영속상태이다. Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 2. 영속 엔티티 매니저를 통해 엔티티를 영속성 ..
새로운 프로젝트를 생성한다. 의존성 관리는 maven을 사용한다. 프로젝트 구조는 아래와 같다. 먼저 의존성 관리를 위해 pom.xml을 보자 4.0.0 org.hibernate hibernate-entitymanager 5.4.10.Final com.h2database h2 1.4.199 org.example ch2-jpa 1.0-SNAPSHOT 여기서 두가지 라이브러리를 사용한다. hibernate는 JPA 표준과 하이버네이트를 포함하는 라이브러리이다. h2 데이터베이스는 h2 데이터 베이스를 사용하게해준다. 따로 mysql이나 오라클같은 데이터베이스 대신 가벼운 h2를 사용하여 간편하게 테스트한다. 이번에는 회원 클래스에 JPA가 제공하는 매핑 어노테이션을 추가해보자. @Entity @Table(n..
JPA는 자바 ORM(객체관계매핑) 기술에 대한 API 표준 명세다. 즉, 인터페이스를 모아둔 것이다. 따라서 JPA를 사용하려면 JPA를 구현한 ORM프레임워크를 사용해야한다. 이중 Hibernate가 가장 대중적이다. JPA라는 표준 덕분에 특정 구현 기술에 대한 의존도를 줄일 수 있고 다른 구현 기술로 손쉽게 이동할 수 있다. 다시말하면 Hibernate가 아닌 다른 ORM프레임워크로 변경해도 JPA인터페이스를 사용하고있기 때문에 코드상에서 변경해야할 부분이 크게 줄어든다. 왜 JPA를 사용해야 하는가? 1. 생상성 JPA를 사용하면 자바 컬렉션에 객체를 저장하듯이 JPA에 저장할 객체를 전달하면된다. SQL을 작성하고 JDBC API를 사용하는 반복적인 일을 JPA에서 대신해준다. 나아가서 JPA..