SpringBoot(14)
-
더티체킹 Setter 없이 구현하기
JPA를 사용하게 되면 추가, 수정, 삭제, 조회 중 수정 부분이 크게 다른데, 수정의 경우 쿼리에 관한 코드가 따로 없다. 수정은 JPA에서 트랜잭션이 끝나는 시점에 변화가 있는 모든 엔티티 객체를 데이터베이스에 자동으로 반영해 줄 때 일어난다. 김영한 님의 스프링 강의를 들을 때 나는 처음으로 더티체킹을 알았다. 영한님의 강의에서 데이터를 수정하기 위해 setter를 이용하였지만 이는 강의의 편의를 위해 열어둔 것으로 기본적으로 setter를 열어두게 되면 문제가 발생할 여지가 있다고 하였다. 이번 프로젝트에서는 이러한 문제를 예방하고자 setter를 생성하지 않고 수정을 구현했는데, 계속 수정이 이루어지지 않아 애먹었다. 빌더 클래스 이용하기 Diet diet = Diet.builder() .foo..
2023.07.29 -
[JPA] 연관관계 매핑 더 깊게 파해쳐보기
연관관계 매핑 시 고려사항 다중성(다대일, 일대다, 일대일, 다대다) 단방향, 양방향 연관관계 주인 다대일[N:1] 다쪽이 가장 외래 키를 가지고 있으며 연관관계의 주인이다. 다대일 관계의 반대 방향은 항상 일대다 관계이며 가장 많이 사용하는 연관관계이다. 단반향 연관관계 // Member class @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team 양방향 연관관계 // Member class(연관관계 주인) @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team // Team class @OneToMany(mappedBy = "team") private List members = new ArrayL..
2023.03.25 -
[JPA] 연관관계 매핑 방법을 알아보자!
연관관계 매핑 방향: 단방향, 양방향 다중성: 다대일, 일대다, 일대일, 다대다 연관관계의 주인: 객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해야 한다. 연관관계를 가지는 이유 객체를 테이블에 맞춰 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. 테이블의 경우 외래 키로 조인을 이용하여 연관된 테이블을 찾지만 객체의 경우 참조를 사용해서 연관된 객체를 찾기 때문이다. 또한 객체의 연관관계는 단방향이지만, 외래 키를 사용하는 테이블의 연관관계는 양방향이다. 테이블과 객체 사이에는 이런 큰 간격이 존재하기 때문에 연관관계를 매핑하는 것이 필요하다. 단방향 연관관계 다중성에 따라 매핑 정보를 나타내는 어노테이션을 표시해줘야 한다. 만약 회원과 팀이라는 다대일 관계가 존재할 때 @ManyToO..
2023.03.25 -
[JPA] 엔티티 필드와 컬럼 매핑의 기본!
필드와 컬럼 매핑 @Entity public class Member { @Id @Column(name = "ID") private Long id; @Column(name = "NAME") private String userName; private Integer age; @Enumerated(EnumType.STRING) private RoleType roleType; @Temporal(TemporalType.TIMESTAMP) private Date createdDate; @Temporal(TemporalType.TIMESTAMP) private Date lastModifiedDate; @Lob private String description; } 자바의 enum을 사용해서 회원의 타입을 구분했는데, 이..
2023.03.25 -
[JPA] 엔티티 매핑의 기본 정보
엔티티 매핑 객체와 테이블 매핑: @Entity, @Table 기본 키 매핑: @Id 필드와 칼럼 매핑: @Column 연관관계 매핑: @ManyToOne, @JoinColumn 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리하는 것으로 엔티티라고 부른다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 애노테이션이 필수이다. 주의사항 파라미터가 없는 public 또는 protected 생성자 즉, 기본 생성자를 필수로 한다. 또한 final, enum, interface, inner 클래스는 사용할 수 없으며 저장할 필드에 final을 사용하면 안 된다. @Entity 속성 속성: name 해당 속성은 JPA에서 사용할 엔티티 이름을 지정한다. 보통 클래스 이름을..
2023.03.25 -
[JPA] 준영속 상태와 merge()란 뭘까?
준영속 영속성 컨텍스트가 관리하는 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(Detached)된 것을 준영속 상태라고 한다. 준영속 상태의 엔티티는 영속성 컨텍스트가 제공하는 기능을 사용할 수 없다. 영속 -> 준영속 상태로 만드는 법 em.detached(entity): 특정 엔티티만 준영속 상태로 전환 em.clear(): 영속성 컨텍스트를 완전히 초기화 em.close(): 영속성 컨텍스트를 종료 em.detached(entity) 특정 엔티티를 준영속 상태로 만드는 메서드로 이 메서드를 호출하는 순간 1차 캐시부터 쓰기 지연 SQL 저장소까지 해당 엔티티를 관리하기 위한 모든 정보가 제거된다. em.clear() 영속성 컨텍스트를 초기화해서 해당 영속성 컨텍스트의 모든 엔티티를 준영속 상태로 ..
2023.03.25