JPA17 다양한 연관관계 매핑 다대일 [N:1] @ManyToOne 다대일 단방향 -> 가장 많이 사용, 다대일의 반대는 일대다 다대일 양방향 -> 외래 키가 있는 쪽이 연관관계의 주인, 양쪽을 서로 참조하도록 개발 일대다 [1:N] @OneToMany ( 이 모델은 권장하지 않음. 실무에서 거의 사용하지 않음. ) 일대다 단방향 -> 일(1)이 연관관계의 주인, 테이블 일대다 관계는 다(N)쪽에 외래 키가 있음 일대다 단방향 단점 -> 엔티티가 관리하는 외래 키가 다른 테이블에 있음, 일대다 단방향 매핑보다는 다대일 양방향 매핑을 사용하자 일대다 양방향 -> 공식적으로 존재 X, @JoinColumn(insertable=false, updatable=false) 다대일 양방향 매핑을 사용하자 일대일 [1:1] @OneToOne 일대.. 2022. 5. 16. 연관관계의 주인과 주의점 연관관계의 주인 (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 웹 계층 개발 - 홈 화면과 레이아웃 홈 화면과 레이아웃 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. 이전 1 2 3 다음