-
[SPRING/JPA] failed to lazily initialize a collection of role 오류
오류 fetch = FetchType.LAZY로 설정 된 entity의 데이터를 사용할 때 데이터조회를 못하면서 아래 오류가 발생했다. failed to lazily initialize a collection of role: com.my.jpa.entity.xxx.yyy, could not initialize proxy - no Session 원인 Lazy 로딩을 하기 위해서는 조회를 했던 영속성 컨텍스트가 유지가 되어야 하는데, 해당 영속성 컨텍스트가 끝나버려서 없어진게 원인이다. 즉, 조회를 진행한 트랜잭션이 이미 종료되었다고 보면 될 듯 하다. 해당 트랜잭션이 유지가 되어야 Lazy 로딩이 가능... Read More
-
[SPRING] Controller에서 빈 문자열을 NULL로 받기
컨트롤러에서 파라미터를 받을 때, 전달 값이 없는 String이 null이 아니라 “” 로 올 때가 있다. 값이 없는 경우 Null로 받기를 원해서 찾아보니 여러가지 방법이 있었다. 그 방법들을 정리해본다. 하나의 컨트롤러보단 글로벌하게 설정하는 방향으로 접근했다. @InitBinder 컨트롤러에 사용하는 어노테이션으로 데이터가 바인딩 될 때 호출이 된다. 보통 사용을 원하는 컨트롤러에 개별적으로 설정하는데, 공통적으로 하고 싶다면 @ControllerAdvice 를 이용해서 설정하면 된다고 한다. @ControllerAdvice public class GlobalBinding{ @InitBin... Read More
-
[SPRING/JPA] JPA Example 사용 할 때 날짜 조건 포함하기
Spring data의 Example을 이용해서 검색을 주로 했는데 날짜를 조건으로 넣어야 하는 상황이 생겼다. 검색을 해보니 Example은 날짜에 대한 제어는 불가능해 보였고 Spring data의 Specification을 이용해서 구현하면 가능하다는걸 보았다. Specification Spring 블로그에 가보면 이렇게 설명이 되어있다. To be able to define reusable Predicates we introduced the Specification interface that is derived from concepts introduced in Eric Evans’ Domain... Read More
-
[JPA] Respository 만들 때 Not a managed type: class java.lang.Object 오류
오류 java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object JPA에서 공통으로 사용 할 repository를 만드려고 했을 때 해당 메세지가 발생했다. 공통 repository를 만들어서 특정 기능을 공유하려고 했다. public interface CommonRepository<T, ID> extends JpaRepository<T, ID>, JpaSpecificationExecutor<T> { default List<T> something(){ ... } ... Read More
-
[JAVA] Reflection을 이용해서 객체 인스턴스 생성하기
공통 기능 개발 중 불특정 객체에 대한 인스턴스를 생성해야 했다. 자바의 Reflection을 이용해서 인자값으로 들어온 타입의 인스턴스를 생성해주도록 했다. 해당 부분에 대해 정리해본다. 코드 기본 생성자로만 생성하도록 만들었다. public도 isAccessible이 false로 항상 나오는데 이 부분은 더 확인이 필요하다. private <T> T getNewInstance(Class<?> clazz){ try { Constructor<?> constructor = clazz.getDeclaredConstructor(); ... Read More