JPA
-
JPA Specification를 사용하여 조인,검색기능 만들기JPA 2023. 12. 25. 15:21
이 포스트는 Specification의 사용법만 설명한다. 기타 페이징 적용, response방법 등은 생략한다 JPA Specification란? 1. JPA Specification은 Java Persistence API (JPA)에서 제공하는 기능 중 하나로, 동적으로 쿼리를 생성하는 방법을 제공 2. JPA는 자바 어플리케이션에서 관계형 데이터베이스와 상호 작용할 수 있게 해주는 API 3. JpaRepository 상속받을때 JpaSpecificationExecutor도 같이 속받으면 된다. 테스트를 진행하려면 아래의 파일들이 필요하다. AccountSpecification.java public class AccountSpecification { //거래처명 검색 public static Spe..
-
JPQL작성 (native Query) No converter found capable of converting from type 에러해결하기JPA 2023. 12. 17. 15:03
JPA프로젝트에서 통계쿼리를 JPQL로 작성하고 리턴하다 발생한 에러인데 해결방법을 공유한다. 오류 내용 org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type JPQL로 작성한거라 Entity도 따로 만들수가 없었다. 일반적인 dto Class로 리턴하려다가 에러가 발생. 결론적으로 Interface로 리턴해야한다. public interface JqplResponse { long getMember_rank(); //순위 long getCount(); //건수 } 엔티티처럼 카멜케이스를 자동으로 바꿔주지 않기 때문에 JPQL에서 컬럼명을 바꿔주던지, 컬럼 원래..
-
JPA JpaRepository 에서 @Query 쿼리작성하여 사용하기(nativeQuery)JPA 2023. 11. 18. 21:25
JPA에서도 마이바티스처럼 어려운 쿼리를 작성하여 사용할 수 있다. @Query 를 사용하여 여러가지 방법으로 파라미터를 바인딩하여 사용하는 예제다 주의할점은 nativeQuery = true 옵션을 반드시 넣어야한다 1. 파라미터 순서로 바인딩 - 파라미터 순서만 맞으면 된다. - 쿼리문안에서 파라미터는 순서대로 ?1, ?2, ?3, ... 으로 받는다. - 가독성이 떨어지고 명확하지않아 비추천방법이다. import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Par..
-
[JPA] 즉시로딩과 지연로딩이란? (FetchType.EAGER, FetchType.LAZY)JPA 2023. 11. 14. 16:54
JPA에서 연관관계를 조회할 때 참조하는 객체들의 조회 시점을 선택할 수 있도록 두 가지 방법을 제공하는데 즉시 로딩(EAGER Loading)과 지연 로딩(LAZY Loading)이다. 각 연관관계의 default 속성 - @ManyToOne : EAGER - @OneToOne : EAGER - @ManyToMany : LAZY - @OneToMany : LAZY 1. 즉시 로딩(EAGER) - @ManyToOne(fetch = FetchType.EAGER) - 엔티티를 조회할 떄 연관된 엔티티도 함께 조회한다. - 즉시로딩을 사용하면 실제 Member 엔티티를 불러온다. - 즉시 로딩을 최적화하기 위해 가능하면 조인쿼리를 사용한다. 2. 지연 로딩(LAZY) - @ManyToOne(fetch = Fe..
-
JPA 오류 java.lang.IllegalStateException: Cannot call sendError() after the response has been committedJPA 2023. 11. 11. 14:38
java.lang.IllegalStateException: Cannot call sendError() after the response has been committed Before 게시판 Board.java @Table(name = "jpa_board") @Entity @Getter @Setter @ToString @NoArgsConstructor public class Board { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "JPA_BOARD_SEQ") @Column(name="bno") private int bno;//게시판(PK) @Column(name="title", columnDefinition = "varchar..
-
오류 org.hibernate.InstantiationException: No default constructor for entity , with 롬복JPA 2023. 11. 9. 16:52
org.hibernate.InstantiationException: No default constructor for entity Entity를 JpaRepository에서 가져올 때 기본 생성자를 사용하는데, 생성자가 없어서 오류가 발생한다는 내용. entity 클래스에 파라미터가 없는 기본생성자를 만들어주는 @NoArgsConstructor 어노테이션을 추가한다. BEFORE Board.java @Table(name = "JPA_BOARD") @Entity @Data @Builder public class Board { ....생략 } AFTER @NoArgsConstructor 추가 @Table(name = "JPA_BOARD") @Entity @Data @NoArgsConstructor public..
-
[JPA] H2 Database, DB의 GenerationType.IDENTITY null문제JPA 2023. 1. 29. 19:22
@GeneratedValue(strategy = GenerationType.IDENTITY) @Id private Long id; 구글링으로 springboot - jpa - h2 예제를 보면서 따라하다가 PK컬럼에 null 들어가는 문제가 발생. 알고보니 H2버전 문제로 나는 문제라고 한다. H2 2.xx 이상부터 접속정보의 추가로 MODE=MySQL를 넣어야한다. -application.yml url: jdbc:h2:tcp://localhost/~/jwt;AUTO_SERVER=TRUE;MODE=MySQL
-
오류 modelMapper has a non-private no-argument constructor.JPA 2022. 9. 3. 21:46
- 오류나 발생한 곳 public TbUserDto insertUser(TbUserDto dto) { ModelMapper modelMapper = new ModelMapper(); return modelMapper.map(loginRepository.save(dto.toEntity()), TbUserDto.class); } ModelMapper라는 것을 사용하여 데이터 저장 후 저장된 값을 Return 하려고 Dto Entity 변환 과정을하다 아래의 오류가 발생 TbUserDto has a non-private no-argument constructor. ※ TbUserDto는 내가 사용하는 Dto명임. 구글링 해보니 이 에러는 Dto에 기본 생성자가 없어 발생한 문제. 따라서, Dto에 기본 생성자..