JPA 표준스펙에는 fetch join 대상에 별칭이 없지만 하이버네이트는 별칭을 허용한다. 즉 사용할수 있다가 결론이다. 하지만 표준스펙에 없다는 만큼 주의하여 사용해야한다. 애플리케이션에서 fetch join의 결과는 연관된 모든 엔티티가 있을것이라 가정하고 사용해야한다. 컬렉션 결과를 필터링를 하게되면 객체의 상태와 DB의 상태 일관성이 깨지기 때문에 사용을 하면 안되지만 일관성의 문제가 없다면 사용해도 상관은 없다가 3줄요약이다. 참고 https://www.inflearn.com/questions/15876/fetch-join-%EC%8B%9C-%EB%B3%84%EC%B9%AD%EA%B4%80%EB%A0%A8-%EC%A7%88%EB%AC%B8%EC%9E%85%EB%8B%88%EB%8B%A4 해결방..
Spring/JPA
일반적으로 상속 관계 매핑 전략에서 부모클래스와 자식 클래스 모두 데이타베이스 테이블과 매핑함 하지만 @MappedSuperclass 는 부모클래스를 상속받는 자식클래스에게 매핑정보만 제공하고싶을때 사용한다. 엔티티 종류에 상관없이 공통으로 가지고 있어야할 정보가 있다면 (데이타 생성시간, 수정시간 등) 공통 클래스로 추출하고 이를 상속받는 방식으로 구현할 때 사용한다. 그러나 엔티티는 엔티티만 상속받을수 있기 때문에 엔티티가 아닌 클래스를 상속 받기 위해서 @MappedSuperclass 를 사용한다. 만약 특정한 테이블하나만 이름을 다르게 쓰고싶을때에는 따로 만들지 않고 @AttributeOverride를 사용하여 필요한 매핑정보만 재정의를 하면 된다. @Data @Entity @AttributeOv..
Auduting 이란 보통 Entity는 데이터의 수정시간과 생성시간을 포함한다. 추후에 도움이 되기 때문에 특별한 경우가 아니라면 항상 들어가게 된다. 하지만 이런 코드를 모든 곳에 구현해야한다면 매우 많은 중복이 발생하게 될것이고 결국 코드는 지저분해진다. 이런 문제를 해결하려고 나온것이 JPA Auditing 이다. LocalDate 사용 java8 부터 기존 Java 의 기본 날짜 타입인 Date의 문제점을 고친 타입이 나왔는데 그것이 LocalDate와 LocalDateTime 이다. 더보기 java date의 문제점 1. 불변 객체가 아님. 2.Calendar는 월(month)값 설계가 잘못됨 참조 https://d2.naver.com/helloworld/645609 관련 어노테이션 @Mapp..
@Entity @Entity 어노테이션은 데이타베이스의 테이블과 일대일 매칭되는 객체단위이며 객체의 인스턴스 하나가 테이블에서 하나의 레코드값을 의미한다. 그래서 객체의 인스턴스를 구분하기위해 유일한 키값을 가지는데 이것이 테이블상의 PK와 같은 의미를 가지며 @Id어노테이션으로 표기된다. @Table 의 name 속성을 이용해 데이타베이스상의 실제 테이블 명칭을 작성해준다. 제약사항 필드에 final, enum, interface, class를 사용할 수 없다. 생성자중 기본 생성자가 반드시 필요하다. @Entity @Table(name= "test") public class test { ... } @Colunm 테이블의 컬럼값을 나타내며 굳이 선언하지 않더라도 해당 클래스의 필드는 모두 컬럼이 됨 사..