Spring
-
Spring - JPA @OneToMany java.lang.StackOverflowError: nullSpring 2022. 11. 4. 19:31
Caused by: java.lang.StackOverflowError: null JPA에서 @OneToMany로 두 엔티티간 join을 걸어줄 경우에 StackOverflowError가 발생하는 경우가 있습니다. @Data @Entity public class Person { @OneToMany(fetch = FetchType.EAGER, mappedBy = "person", cascade = CascadeType.REMOVE) private List phoneList; @OneToMany(fetch = FetchType.EAGER, mappedBy = "person", cascade = CascadeType.REMOVE) private List carList; } @Data @Entity public..
-
Spring - JPA cannot simultaneously fetch multiple bagsSpring 2022. 11. 4. 19:16
Caused by: org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags 하나의 entity에 한개 이상의 FetchType.EAGER 를 사용할 때 발생합니다. @Entity public class Person { @OneToMany(fetch = FetchType.EAGER, mappedBy = "person", cascade = CascadeType.REMOVE) private List phoneList; @OneToMany(fetch = FetchType.EAGER, mappedBy = "person", cascade = CascadeType.REMOVE) private List carLis..
-
Spring - LazyInitializationException: could not initialize proxy – no SessionSpring 2022. 9. 20. 01:32
JPA를 쓰다보면 이런 에러메시지를 볼 때가 있습니다. 에러메시지 Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.example.domain.CompanyEntity.personList, could not initialize proxy - no Session Entity 코드 @Entity @Table(name = "company") public class Company implements Serializable { @Id @Column(name = "id") private Long id; @OneToMany(fetch = FetchType.LAZY, mappe..
-
Spring - static 변수에 @Value 어노테이션 적용Spring 2022. 9. 5. 18:39
Spring boot에서 application.yml에 저장된 설정값을 가져올 때 @Value Annotation을 사용합니다. 보통은 이런 식으로 @Configuration에서 설정값을 매핑시킵니다. @Configuration public class AWSConfig { @Value("${cloud.aws.region.static}") private String region; } 그런데 @Component에서 @Value 어노테이션을 설정값을 가져오면 에러가 발생합니다. @Component public class S3Adapter { @Value("${cloud.aws.region.static}") private String region; } 에러 메시지 Description: Parameter 0 o..
-
Spring - 스프링 부트 PID 파일 생성하기Spring 2022. 7. 18. 18:58
스프링 부트 애플리케이션이 실행 중일때 프로세스를 종료하려면 PID(Process ID)를 알아야 한다. 프로세스를 종료 및 재시작을 자동화하기 위해서는 PID 파일을 이용하는 것이 좋다. 1. ApplicationPidFileWriter() import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.ApplicationPidFileWriter; @SpringBootApplication public class Application { public static void main(St..
-
Spring - InvalidDataAccessApiUsageException: No enum constant 에러Spring 2022. 7. 13. 18:43
nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: No enum constant JPA에서 query 호출 시에 No enum constant enum 에러가 발생하는 경우 원인은 enum에 존재하지 않는 값이 DB에 있기 때문입니다. DB에서 읽어와서 Object로 변환하는 중 enum에 없는 값이 있기 때문에 에러가 발생합니다. @Entity @Table(name = "person") public class PersonEntity { @Column(name = "name") private String name; @Column(name = "job") @Enumerated(value = EnumType.STRI..
-
Spring - Lombok @Data 사용시 boolean 주의할 점Spring 2022. 7. 7. 18:41
스프링에서 어노테에션만 붙여서 getter, setter를 자동생성해서 사용하는 경우에 Lombok을 사용합니다. Lombok @Data 어노테이션 사용 시 boolean 타입은 생성되는 getter의 모습이 다릅니다. import lombok.Data; @Data public class Person { private String name; private boolean male; public void test() { this.getName(); this.isMale(); this.setMale(true); } } primitive type boolean을 사용한 경우에는 getter가 getXX()로 생성되지 않고 isXX() 로 생성됩니다. 위의 코드에서 boolean male로 선언해서 getter는..
-
Spring - @Component, @Service, @Controller 차이Spring 2022. 6. 20. 18:40
@Component dependency injection를 위한 가장 기본 어노테이션 스프링 bean으로 관리되는 객체임을 표시하기 위해 사용 @Controller Web MVC 코드에 사용되는 어노테이션이다. @RequestMapping 어노테이션을 해당 어노테이션 밑에서만 사용할 수 있다. @Repository data repository를 나타내는 어노테이션 플랫폼 별 exception을 잡아 Spring의 unchecked exception으로 던져준다. @Service 비즈니스 로직을 구현하는 레이어 다른 어노테이션과 다르게 @Component에 추가된 기능은 없다.