본문 바로가기

JPA17

연관관계의 주인과 주의점 연관관계의 주인 (Owner) 두 객체 연관관계 중 하나를 정해서 테이블의 외래 키를 관리해야 한다. 이 떄 관리하는 객체를 연관관계의 주인이라고 한다. 누구를 주인으로 ? -> 외래 키가 있는 곳을 주인으로 ( 또는 ManyToOne에서 Many쪽이 좋다. ) 주의할점 순수 객체 상태를 고려해서 항상 양쪽에 값을 설정하자 연관관계 편의 메소드를 생성하자 N에 작성해도 되고 1에 작성해도 된다 양방향 매핑시에 무한루프를 조심하자 (컨트롤러에서 엔티티를 절대 반환하지 말것) 예) toString(), lombok, JSON 생성 라이브러리 정리 단방향 매핑만으로도 이미 연관관계 매핑은 완료 양방향 매핑은 반대 방향으로 조회(객체 그래프 탐색) 기능이 추가된 것 뿐 JPQL에서 역방향으로 탐색할 일이 많음 .. 2022. 5. 14.
JPA 연관관계 매핑 기초 연관관계 매핑 기초 객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다. - 조영호(객체지향의 사실과 오해) ( 책 추천 : 객체지향의 사실과 오해, 오브젝트 ) 객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. 따라서 객체 연관관계를 사용한 객체 지향 모델링을 해야한다. 단방향 연관관계는 -> 간단하고 어렵지 않다. Member class 기준 private Team team; 을 선언한 후 @ManyToOne 과 @JoinCoulmn(name = "TEAM_ID") 어노테이션을 달아주면 된다. 양방향 연관관계와 연관관계의 주인 -> 어렵다 (연관관계 매핑의 핵심) 양방향은 Member class는 그대로 두고 Team class에 private List.. 2022. 5. 13.
JPA 엔티티 매핑 엔티티 매핑 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinmColumn @Entity 기본 생성자 필수 final 클래스, enum, interface, inner 클래스 사용 X 저장할 필드에 final 사용 X 데이터베이스 스키마 자동 생성 hibernate.hbm2ddl.auto 옵션 create, create-drop, update, validate, none 데이터베이스 스키마 자동 생성 - 주의 운영 장비에는 절대 create, create-drop, update 사용하면 안됨 개발 초기 단계는 create 또는 update 테스트 서버는 update 또는 validate 스테이.. 2022. 5. 11.
HelloJPA와 영속성 관리 - 내부 동작 방식 HelloJPA @Entity : JPA가 관리할 객체 @Id : 데이터베이스 PK와 매핑 JPA에서는 트랜잭션이라는 단위가 매우 중요하다. 그래서 데이터를 변경하는 모든 작업은 JPA의 트랜잭션 안에서 작업해야 한다. 저장 -> em.persist() 조회 -> em.find() : 한 객체 조회할때 삭제 -> em.remove() 수정 -> em.setOOO() 수정 부분에서는 따로 em.persist()를 안해도 된다. jpa가 자동으로 update 쿼리를 날려준다. 그 이유는 jpa를 통해서 entity를 가져오면 이 entity는 jpa가 관리를 한다. 그리고 jpa가 트랜잭션을 커밋하는 시점에 변경을 감지하여 업데이트 쿼리를 날린다. 주의 엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전.. 2022. 5. 10.
JPA에 대해.. 현재 데이터베이스 세계의 헤게모니(어떤 집단을 주도할 수 있는 권력이나 지위)는 관계형 DB이다. 지금 시대는 객체를 관계형 DB에 관리한다. 하지만 이는 패러다임의 불일치를 부른다. 객체 vs 관계형 데이터베이스 이기 때문이다. 개발자는 SQL에 의존적인 개발을 하게되고, 지루하고 반복적인 CRUD작업을 진행하는 SQL 매퍼가 된다. 객체답게 모델링 할수록 매핑 작업만 늘어난다. 객체를 자바 컬렉션에 저장하듯이 DB에 저장할 수는 없을까? 그 해답은 JPA 이다. JPA ? - JAVA Persistence API - 자바 진영의 ORM 기술 표준 ORM ? - Object-relational mapping (객체 관계 매핑) - 객체는 객체대로 설계 - 관계형 데이터베이스는 관계형 데이터베이스대로 설.. 2022. 5. 9.
JPA 웹 계층 개발 - 홈 화면과 레이아웃 홈 화면과 레이아웃 lombok의 @Slf4j 를 사용하면 기존의 Logger, LoggerFactory의 기능을 그대로 사용할 수 있다. 참고: Hierarchical-style layouts 예제에서는 뷰 템플릿을 최대한 간단하게 설명하려고, header , footer 같은 템플릿 파일을 반복해서 포함한다. 다음 링크의 Hierarchical-style layouts을 참고하면 이런 부분도 중복을 제거할 수 있다. https://www.thymeleaf.org/doc/articles/layouts.html 현재는 Include-style layouts이지만 (예제에서 간단하게 하기 위해서) Hiearachical-style layout(계층 스타일 레이아웃)을 적용하면 코드중복 없이 깔끔하게 코딩할.. 2022. 4. 22.