2023년 07월 05일

@VERO
Created Date · 2023년 07월 05일 07:07
Last Updated Date · 2023년 07월 05일 07:07

LOG

  • PR 템플릿, 스프린트 기간 같은 세부 사항들을 정했다. 곧 기능 개발을 할 수 있을 것 같아서 좋다 🥹 얼른 개발하고 싶다
  • 요즘 끝나고 프로젝트 관련해서 할 게 없다보니 알고리즘만 푸는 중이다.

배운 것

  • @Lob 을 사용하면 매핑하는 필드의 타입에 따라 DB의 BLOB, CLOB과 매핑된다.
    • String, char[], java.sql.CLOB : CLOB
    • byte[], java.sql.BLOB : BLOB
@Column(name = "contents")  
@Lob  
private String contents;
  • 테이블의 unique 조건은 다음과 같이 정의한다.
@Table(name = "user", uniqueConstraints = @UniqueConstraint(name = "UK_a3imlf41l37utmxiquukk8ajc", columnNames = "user_id"))
@Entity  
public class User

Unique 조건의 이름을 지정하지 않으면 vendor가 생성한 값이 들어갈 수 있다.
JPA 2.0 부터 Unique 조건의 이름을 제공할 수 있다.

uniqueConstraints 속성은 배열로 여러 가지 @UniqueConstraint 를 가질 수 있다.
columnNames 속성은 여러 가지를 지정할 수 있다.

  • 컬럼의 기본값을 설정하는 방법은 다음과 같다.
@ColumnDefault("-1")
private int score;

// 또는

@Column(columnDefinition = "integer default -1")
private int score;
  • 준영속 상태는 다음과 같이 만들 수 있다.
Person person = new Person("vero");
Person savedPerson = personRepository.save(person);
entityManager.detach(savedPerson);

특정 엔티티만 준영속 상태로 전환한다. (준영속 상태가 되면 1차 캐시에서 빠진다)
준영속 엔티티는 영속성 컨텍스트가 더 이상 관리하지 않는 엔티티로, 1차 캐시부터 쓰기 지연 SQL 저장소까지 해당 엔티티를 관리하기 위한 모든 정보가 제거된다.

참고 : https://www.nowwatersblog.com/jpa/ch3/3-6

  • @Id 컬럼의 이름이 id가 아니더라도 JPA가 기본적으로 제공하는 findById 는 사용할 수 있다.
  • JPA의 @Temporal 어노테이션은 LocalDateTime 필드에 사용할 수 없다.
  • lis 푸는 법을 드디어.. 알아냈다.

궁금한 것

  • jpa도 프록시를 쓰나? 엔티티가 빈 생성자를 제공해야 하는 것도 그렇고, 빈 생성자가 private 이면 컴파일 에러가 뜨는 것도 의심스러움
  • JDK 17 의 sealed class 도 JPA 엔티티로 쓸 수 없을까?

느낀 것

  • 알고리즘 어렵다. 근데 이제는 열심히 하면 잘할 수 있을 것 같다.
  • 스타벅스 추워.