본문 바로가기

JPA7

[springboot] 엔티티 int VS Integer 타입 차이 int 타입은 기본타입이고, Integer타입은 래퍼클래스이다.만약 도메인에 null이 들어온다면 int타입은 에러이고, Integer타입은 null값 으로 받아들인다.따라서, 가격이 없을 때 null로 하고 싶으면 Integer타입으로 선언하면 되고, @Column private Integer price; //가격0으로 하고 싶으면 int 타입으로 하면 된다.널값 허용X이면 int로 해서  @Column(nullable = false) private int price; //가격이렇게 하면 된다. 2024. 4. 6.
[JPA] Repository에서 DTO로 데이터 셋팅 @Query() jpa를 사용할 때 Repository에서 데이터를 바로 DTO로 셋팅하는 방법을 사용하려면 2가지 방법이 있다.1. 첫번째 방법: @Query()를 사용쿼리어노테이션을 사용해 바로 DTO에 매핑하는 방법이 방법은 쿼리의 결과를 바로 DTO에 매핑하므로, 불필요한 객체 변환 단계를 거치지 않아서 성능상 이점이 있을 수 있습니다.코드가 간결해지고 읽기 쉬워집니다. 쿼리의 내용이 명확히 드러나므로 이해하기 쉽습니다.그러나 DTO의 생성자에 맞게 쿼리 결과를 매핑해야 하므로 DTO의 생성자와 쿼리의 필드 리스트가 일치해야 합니다.별다른 DTO 가공이 필요 없다면 바로 DTO로  @Query을 사용해 DTO로 넣으면 된다.예시:DistrictRepository.javapackage com.pnow.reposit.. 2024. 2. 22.
[JPA] Entity PK는 bigint(MySQL)-Long(java) 타입으로 해야 하는 이유 프로젝트 개발 시 향후 대량의 데이터를 고려한다면 JPA를 통해 Entity PK는 bigint 타입이 좋다.중규모의 프로젝트면 int 타입이 적절하지만, 거의 대부분이 대량의 데이터를 DB에 저장하게 되므로 그 많은 수억건의 데이터들을 다 수정하려면 꽤 많은 시간이 소요되기 때문에 애초에 개발 시 bigint 타입으로 하는 것이 좋다. 비록 int형에 비해 디스크 용량을 많이 차지하지만 향후 유지보수를 위해선 bigint 타입으로 하는 것이 옳다. 2024. 2. 15.
[JPA] @Setter 대신 @Builder 사용해야하는 이유 @Setter로 생성자 이용 vs  @BuilderJUnit 테스트 할 때 @Setter를 사용하면 set문장이 많아져 코드가 길어진다. 이를 @Builder를 사용하면 한줄코드로 간편하다.  또한, 명확히 어떤 필드에 어떤 값을 채워야 할지를 알 수 있는 장점이 있다.(@ Builder는 해당 클래스의 빌더 패턴 클래스를 생성해주고, 생성자 상단에 선언 시 생성자에 포함된 필드만 빌더에 포함한다.) 주의: @Builder를 사용하려면 기본생성자를 만들어주는@NoArgsConstructor(access = AccessLevel.PROTECTED) 어노테이션도 함께 써야 한다. 그 이유는Reflection을 통한 객체 생성: 빈 객체를 생성하고 필드 값을 설정하기 위해 Java Reflection을 사용할.. 2024. 2. 14.