코딩 (152) 썸네일형 리스트형 [SpringBoot] 엔티티에는 setter를 두지 않는다. 확장성 있는 함수구성 왜 엔티티에 setter를 두지 않는지 몇개의 블로그를 읽고 정리했다. https://velog.io/@aidenshin/%EB%82%B4%EA%B0%80-%EC%83%9D%EA%B0%81%ED%95%98%EB%8A%94-JPA-%EC%97%94%ED%8B%B0%ED%8B%B0-%EC%9E%91%EC%84%B1-%EC%9B%90%EC%B9%99 JPA 엔티티 작성 - Setter 금지 엔티티를 작성함에 제가 생각하는 몇가지 원칙(?)이 있습니다.그중 엔티티(객체)의 Setter 사용 금지 원칙(?) 에 대해 알아보겠습니다.엔티티를 작성할 때 습관적으로 모든 필드에 Setter를 생성하는 velog.io setter는 메서드의 의도를 알기 힘들다. setter가 아닌 상황에 맞는 메서드를 만들어서(사실 기.. SQL count(*) 맨날 헷갈린다. 맨날 헷갈려서.. 정리.. 담에 글을 모두 볼 때 다시 볼 수 있게 count(*) : 행의 개수 null이든 뭐든 존재하는 모든 row의 개수 count(col) : 특정 컬럼이 null이 아닌 row의 개수 가져오기 [JPA] @Transcational의 유무에 따른 동작 차이 https://velog.io/@roro/JPA-JPQL-update-%EC%BF%BC%EB%A6%AC%EB%B2%8C%ED%81%AC%EC%99%80-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8 [JPA] JPQL update 쿼리(벌크)와 영속성 컨텍스트 JPQL의 update 쿼리 호출 후 발생하는 상황에 대해 알아보자. Post Entity 먼저 테스트를 위해 id와 title만 있는 간단한 Post 엔티티를 생성한다. PostRepository PostRepository를 인터페이스 만들고 JpaReposi velog.io 제목을 잘 지은것 같다. ㅎㅎ 먼저 위의 블로그에 정리된 2가지 이슈를 반드시 보고 오자. 저걸 모르면.. controller, service, repository 아키텍처의 고민(미완) 서로 독립적이어야 할까? 아니면 서로 유기적이어야 할까? 어떻게 하느냐에 따라서 controller - service 의 정보전달에 차이가 생긴다. 쉽게 말하면 service layer의 함수 리턴값이 void인지 DTO값인지 결정됨. 뭐가 좋은지와 그 근거를 모르겠다... SpringBoot static final에 DI하기? 아래는 Test클래스의다. 보통 Autowired를 사용할 때는 final 을 사용했다. final을 사용하면 빨간줄 뜬다. static을 빼고 final만 사용하면 빨간줄 안뜬다. -> 객체의 생성시점이 달라서 그렇다. static은 스프링 빈이 로딩되기 전에 초기화 된다. static final은 static변수가 생성되면서 바로 초기화되어야 하는데 이 시점에는 아직 빈이 없기 때문에 값을 넣을 수가 없는 것. static final에 빈을 넣을 수는 없다. (final은 생성과 동시에 초기화 해야함.) static이 있으면 static을 담고 있는 객체가 생성되기 전에 바로 객체가 생성되기 때문에 final을 붙이면 에러뜨는 것.(context가 로드되지 않은 시점에서 초기화 되기 때문에 null인.. [spring boot] org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Invalid use of argument matchers!2 matchers expected, 1 recorded: 단위 테스트 도중 아래와 같은 예외 발생. org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Invalid use of argument matchers! 2 matchers expected, 1 recorded: 핵심을 실제 값을 넣으면 안되고 matcher를 사용해서 넣어야한다. @Test public void findByStoreTest() { //given Store s = Store.builder() .uuid(UUID.randomUUID()) .build(); Cake c = Cake.builder() .uuid(UUID.randomUUID()) .store(s) .build(); Customer customer1 = Customer.. springboot 로컬에서는 테스트 통과하는데 aws linux에서는 통과못함.. # 로컬에서는 모든 테스트를 통과하는데 aws에서만 유난히 계속 실패했다... 얻은 교훈 : 역시 코딩할 때는 하나부터 열까지 다 의심하고 이게 맞을까?라고 생각할 시간에 검증해보는게 빠르다.. # 이유를 찾고자 하나씩 수정하면서 commit을 날렸다. 혼자 작업하는 거라서 커밋 어떻게 날리든 상관없었음.. Test클래스에 @Commit도 붙이고 괜히 @modifying도 붙여보았다. 근데 이들은 문제가 아니었다. 마지막 커밋에서 나와있듯이 Store->store로 바꿔서 해결할 수 있었다. 왜인지 알아보자. # 먼저 위의 사진을 보면 StoreRepositoryTest의 findByLocation()에서 예외 발생이다. 오류 스크린샷을 보면 StoreRepositoryTest:112에서 발생한다고 나와.. [JPA Exception] TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing 과 여러 가지 문제들 결론적으로 말하면 엔티티를 저장할 때 모든 연관관계의 엔티티는 영속상태여야한다는 원칙을 몰라서 생긴 일이었다. # org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : pnu.problemsolver.myorder.domain.Cake.store -> pnu.problemsolver.myorder.domain.Store; nested exception is java.lang.IllegalStateEx.. 이전 1 2 3 4 5 ··· 19 다음