본문 바로가기

분류 전체보기270

[JPA] Error creating bean with name 'entityManagerFactory' defined in class path resource 에러 해결 spring 버전 : 2.2.4 gradle 버전 : 6.4.1 //postgresql 의존성 추가 compile group: 'org.postgresql', name: 'postgresql' JPA + Spring Boot + H2를 사용하는 프로젝트에서 PostgreSql를 연동하려고 접속 정보를 입력 후 메인을 실행시켰는데 아래와 같은 에러가 발생했다. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/Hiberna.. 2020. 8. 5.
[Spring] Restful Api example (with Hateoas) 구현 환경 https://spring.io/guides/gs/rest-hateoas/ 의 기본 예제를 다운 받아 사용하였다. Spring Boot (2.2.2 RELEASE) H2 JPA 소스코드 Member @Entity @Table(name = "member") @NoArgsConstructor @AllArgsConstructor @Getter @Setter @Builder @EqualsAndHashCode(of = "id") public class Member { @Id @GeneratedValue private Long id; private String name; private Integer age; @Enumerated(EnumType.STRING) private Grade grade; private.. 2020. 7. 29.
[JPA] update가 왜 안되는거지..? (detached to persistent) 문제의 메소드 @PostMapping("/settings/profile") public String updateProfile(@CurrentUser Account account, @Valid Profile profile, Errors errors, Model model){ if(errors.hasErrors()){ model.addAttribute(account); return "/settings/profile"; } //데이터 변경 작업은 서비스 쪽에 위임 accountService.updateProfile(account, profile); //사용자의 form submit이 다시 일어나지 않도록 redirect return "redirect:/" + "settings/profile"; } 분명히 up.. 2020. 7. 21.
[JPA] Repository 인터페이스 작성시 유의사항 JpaRepository를 상속 받은 인터페이스를 작성 할 때, 기본 제공 메소드만 쓰는 경우는 별로 없다고 생각한다. 필요로하는 커스텀 메소드가 필요하다. 이때 간과해서는 안될 아주 중요한 부분이 있다..!!! 기본적으로 JpaRepository 인터페이스에는 @Transactional 이 달려있다. 따라서 해당 메소드를 거친 엔티티는 계속 영속성 상태이다. 하지만, 우리가 임의로 정의해준 메소드에는 @Transactional이 적용되지않는다. 따라서 정의한 메소드에도 Transactional이 정의되도록 꼭 어노테이션을 붙여줘야한다. 그렇지 않았다가는 나중에 어마어마한 시한폭탄이 될것이다.. //select 만 하는 경우 readOnly 옵션을 줌으로써 조금이나마 성능향상을 꾀할 수 있음 @Trans.. 2020. 7. 21.
[JPA] 이메일 인증 토큰 값이 Null ?? (EntityLifeCycle, Transactional) 백기선님의 JPA 웹앱 만들기 강의를 참고하였습니다. 회원가입시 이메일로 본인 확인을 검증하는 과정에서 임시로 발급한 token값이 null이어서 에러 페이지를 뱉어냈다. java.lang.NullPointerException: null at com.jpa.studywebapp.account.AccountController.checkEmailToken(AccountController.java:65) ~[main/:na] 왜그럴까? 여기서 한 번 더 JPA 라이프사이클의 중요성 을 깨닫는다. 문제의 소스코드 public void processNewAccount(SignUpForm signUpForm) { Account newAccount = saveNewAccount(signUpForm); newAccou.. 2020. 7. 14.
[Spring] @Transactional - 2 isolation (격리수준) 이전 글에서 트랜잭션 전파레벨에 대해서 알아보았다. 트랜잭션을 사용할 때, 전파레벨과 함께 따라오는 것이 격리수준이다. 트랜잭션에서 일관성이 없는 데이터를 허용하도록 하는 수준을 말한다. 격리수준에는 4가지가 있다. READ_UNCOMMITED (level 0) READ_COMMITED (level 1) REPEATABLE_READ (level 2) SERIALIZABLE (level 3) 격리 수준이 높아질수록 동시성(Concurrency)은 높아지고 속도는 느려진다. 이 둘의 균형을 잘 맞추는것이 중요하다. READ_UNCOMMITED (커밋되지 않는 읽기, level 0) 트랜잭션 처리중 or 아직 commit되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용 어떤 사용자가 A라는 데이터를 B로 변.. 2020. 7. 9.