묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
궁금한 점이 생겨 질문 남겨봅니다.
자바 서비스로직의 트랜잭션내에서 오류가 발생하면 롤백이 될건데, 그러한 오류사항을 DB에 어떻게 로그로 남길 수 있는지 알 수 있을까요???
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
지연 로딩(+ 변경감지..?) 에 대해 질문 드립니다.
지연 로딩으로 인한 프록시 객체는 실제 사용 시에 쿼리가 나가는 것으로 생각했으나,생각과 달리 동작하여 질문을 드립니다.> followers, followings는 LAZY로 설정되어 있습니다.this.followings.add() 호출 시점에 Lazy Loading이 수행되어 쿼리가 나갈 것으로 예상했으나, 다음과 같은 출력입니다. getFollowers().size() 호출 시에야 실제 쿼리가 나가는 것으로 보입니다. 필드에 getter가 아닌 직접 접근이 문제였는지 테스트 해보았는데, 직접 액세스 시에도 초기화는 진행되는 것으로 확인됐습니다. 추측가는 바는...Q1. 혹시 컬렉션의 메소드별(add() , size())로 초기화가 진행되고 아니고 차이가 있을까요?Q2. 위 경우, 아무튼 메모리 상 컬렉션에만 객체를 저장한 상태가 됐습니다. 근데, size() 호출 시에 DB에서 끌어온 컬렉션과, 메모리에 올라간 1개가 합쳐진 개수가 잘 합쳐진 것 같습니다. followers 같은 경우 엔티티에 스냅샷도 없어야 할 상황인 것 같은데, 작동 원리가 궁금합니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
jpa설정하는데 자꾸 Socket faul to connct to host라고 나옵니다.
안녕하세요항상 강의 잘보고 있습니다.수업내용은 아니지만 혹시나 해서 여쭤봅니다. 다름이 아니라 본 과정에서 jpa에 대해 배우고 토이프로젝트에서 ec2위 도커에서 mariaDB를 띄워 워크벤치에서 접속 되는것을 확인하고 jpa에서 설정정보를 기입을 하였습니다. 그러나 인텔리제이에서 tomcat을 띄우니까 다음과 같이 오류가 나오네요..어떤것 때문인지 한번 봐주실수 있나요?컨테이너 포트는 3306 -> 3306으로 설정해놓았으며ec2인스턴스, 컨테이너의 방화벽 모두 0.0.0.0/0으로 열어놓았습니다.언어: 자바17스프링부트: 3.0.5DB: mariadb 10.7mariadb connector : 3.0.10dialect: org.hibernate.dialect.MariaDB103Dialect추가로 혹시나 하여 프로젝트 파일을 압축해서 링크 걸어놓겠습니다. https://drive.google.com/file/d/1enCUJr78tuccks2Pv9Dn8vabr_lQySuA/view?usp=sharing
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JpashopApplicationTests 삭제해버렸는데...
JpashopApplicationTests 클래스를 삭제해서 지금 Test 코드를 못 돌리고 있습니다. 혹시 이 안에 코드가 어떻게 되어있는지 알 수 있을까요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
학습적인 질문보다는 저작권에 대해서 문의 드립니다.
안녕하세요. 제가 개인 프로젝트를 준비하고 있는 와중에 JPA를 도입 하면서 현재 강의를 수강하게 되었습니다.개인프로젝트를 만들면서 기술블로그 카테고리를 만들 예정입니다. 여기에는 개인프로젝트를 진행하면서 발생하는 이슈나 혹은 기초 지식부터 공부한 내용을 정리하는 블로그로 현재는 생각 하고 있습니다.기술 블로그 내용에는 김영한 프로님의 시청 중인 강의 내용과 프로님의 책을 참고하여 적어보고 싶습니다만 출처는 분명 밝히겠지만 이렇게 여쭤보지 않고 블로그를 작성 한다는 것이 프로님 포함하여 강의를 준비하신 노력과 책을 써주신 분들을 무시하는 것 같습니다. 더 나아가 노력 해주신 많은 분들이 기분이 나쁠수 있겠다 싶어 당황스럽고 진부 하실지는 모르겠으나, 혹시 허락을 여쭤보자 이렇게 질의 응답에 문의 드립니다.만일 이에 조금이라도 불편하신 부분이 있다면 더는 여쭤보지 않겠습니다.답변 부탁드리겠습니다. 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
오타 제보합니다!
ver.23-01-03상품 서비스 개발 부분(48p)에 상품 서비즈 코드 -> 상품 서비스 코드 오타가있습니다!
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 코드 오류
12:34 테스트가 통과해야하는데 오류가 나고 못찾겠어요오류 메시지를 보면 <jpabook.jpashop.exception.NotEnoughStockException> 를 기대했지만<org.springframework.dao.InvalidDataAccessApiUsageException>이 나왔는데 디버그를 돌려보니까이 줄에서 멈춥니다. itemId가 null인게 문제일까요??근데 희안한건 상품주문 테스트는 또 통과가 됩니다 ㅠㅠ
-
미해결실전! Querydsl
안녕하세요 프로젝트 실행 문의 드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]영한쌤 강의를 쭉 따라서 들어왔는데요. 그동안의프로젝트와는 다르게 왜 이번 querydsl 편은 프로젝트 생성후 실행시 그냥 폴더 자체를 선택하는게 아니라 build.gradle 파일을 선택후 오픈해야 하나요?? 또 그렇게 build.gradle 파일 한개만 선택해서 오픈했는데 일반 프로젝트 폴더를 여는것처럼 main부터 test및 다른 파일 모두가 있는건가용??? 그리고 왜 querydsl폴더 자체를 선택후 열면 파일구조는 모두 똑같은데 활성화가 안되는지 궁금합니다
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
bootstrap.yml 파일의 "encrypt.key-store.password" 암호화
spring config를 적용하면 설정 값들에 암호화를 수행하여 "{cipher}..." 구문으로 적용할 수 있는데, bootstrap.yml 파일의 "encrypt.key-store.password", "encrypt.key-store.secret" 항목의 값은 암호화를 어떻게 할 수 있는지 방법 부탁드립니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
cascade option 적용 후 부모 객체 삭제시 쿼리의 수 질문
1.코드상황Member(부모), Latter(자식)의 양방향 연관관계로 매핑되어있고 Member 1개에 Latter2개가 저장되어 있는데 이를 지우는 과정에서의 쿼리 개수가 예상과 다른 상황입니다."delete from latter where latter_member_id = ?" 하나가 나와 다 지울 줄 알았으나"delete from latter where latter_id = ?""delete from latter where latter_id = ?"총 2번 쿼리가 나갑니다. 2.코드Latter.classpackage dev.devpool.domain; import dev.devpool.domain.enums.IsCheck; import javax.persistence.*; import static javax.persistence.EnumType.STRING; @Entity public class Latter { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "LATTER_ID") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "MEMBER_ID") private Member member; private String body; @Enumerated(STRING) private IsCheck isCheck; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Member getMember() { return member; } public void setMember(Member member) { this.member = member; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public IsCheck getIsCheck() { return isCheck; } public void setIsCheck(IsCheck isCheck) { this.isCheck = isCheck; } } Member.classpackage dev.devpool.domain; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "MEMBER_ID") private Long id; private String name; private String nickName; private String email; private String password; public Member() { } public Member(String name, String nickName, String email, String password) { this.name = name; this.nickName = nickName; this.email = email; this.password = password; } @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) private List<Certificate> certificates = new ArrayList<>(); @OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true) private List<Latter> latters = new ArrayList<>(); public List<Latter> getLatters() { return latters; } public void setLatters(List<Latter> latters) { this.latters = latters; } public void setId(Long id) { this.id = id; } public List<Certificate> getCertificates() { return certificates; } public void setCertificates(List<Certificate> certificates) { this.certificates = certificates; } public Long getId() { return id; } public void setId(long id) { this.id = id; } public void setName(String name) { this.name = name; } public String getName() { return name; } public String getNickName() { return nickName; } public void setNickName(String nickName) { this.nickName = nickName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } /** * 편의 메서드 */ public void addCertificate(Certificate certificate) { certificate.setMember(this); certificates.add(certificate); } public void addLatter(Latter latter) { latter.setMember(this); latters.add(latter); } } MemberService의 deleteByIdpublic void deleteById(long memberId) { Member findMember = em.find(Member.class, memberId); if (findMember != null) { em.remove(findMember); } } Test코드@Test public void 쪽지삭제ByMember() { transactionTemplate.execute(status -> { //given Member member = new Member(); Latter latter1 = new Latter(); Latter latter2 = new Latter(); member.addLatter(latter1); member.addLatter(latter2); memberService.join(member); em.flush(); em.clear(); //when memberService.deleteById(member.getId()); em.flush(); em.clear(); //then List<Latter> latters = latterService.findAllByMemberId(member.getId()); assertEquals(0, latters.size()); return null; }); } 쿼리 결과Hibernate: select member0_.member_id as member_i1_2_, member0_.email as email2_2_, member0_.name as name3_2_, member0_.nick_name as nick_nam4_2_, member0_.password as password5_2_ from member member0_ where member0_.email=?Hibernate: insert into member (member_id, email, name, nick_name, password) values (default, ?, ?, ?, ?)Hibernate: insert into latter (latter_id, body, is_check, member_id) values (default, ?, ?, ?)Hibernate: insert into latter (latter_id, body, is_check, member_id) values (default, ?, ?, ?)Hibernate: select member0_.member_id as member_i1_2_0_, member0_.email as email2_2_0_, member0_.name as name3_2_0_, member0_.nick_name as nick_nam4_2_0_, member0_.password as password5_2_0_ from member member0_ where member0_.member_id=?Hibernate: ***select certificat0_.member_id as member_i3_0_0_, certificat0_.certificate_id as certific1_0_0_, certificat0_.certificate_id as certific1_0_1_, certificat0_.body as body2_0_1_, certificat0_.member_id as member_i3_0_1_ from certificate certificat0_ where certificat0_.member_id=?Hibernate: select latters0_.member_id as member_i4_1_0_, latters0_.latter_id as latter_i1_1_0_, latters0_.latter_id as latter_i1_1_1_, latters0_.body as body2_1_1_, latters0_.is_check as is_check3_1_1_, latters0_.member_id as member_i4_1_1_ from latter latters0_ where latters0_.member_id=? *** ***Hibernate: delete from latter where latter_id=?Hibernate: delete from latter where latter_id=? ***Hibernate: delete from member where member_id=?Hibernate: select latter0_.latter_id as latter_i1_1_, latter0_.body as body2_1_, latter0_.is_check as is_check3_1_, latter0_.member_id as member_i4_1_ from latter latter0_ where latter0_.member_id=? 3.질문Q1) *** *** 부분에서 cascade 및 양방향으로 걸려있는 것들에 대해 다시 select 쿼리가 날라가는 이유가 무엇인가요? Q2) 왜 latter_id를 바탕으로 쿼리가 2개 나가나요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA 1차 캐시와 쓰기지연 DB 질문 드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. 강의 잘 듣고 있습니다.JPA를 쓸 때 persist()를 호출하면 1차 캐시에 엔티티가 저장되고(영속엔티티), insert쿼리가 쓰기지연 DB에 입력되는 것으로 알고 있는데요.이때 영속된 엔티티의 필드값을 바꾸게 되면 flush될 때 변경감지가 동작해서 update쿼리를 쓰기지연 저장소에 넣게 된다고 알고 있습니다.이제 질문 드리겠습니다. 1) 우선 제가 이해한 persist와 flush의 동작이 맞을까요?2) 맞다면, 비용측면에서 쓰기지연DB에서 DB로 값을 밀어넣어 줄 때 insert, update쿼리 따로 나갈게 아니라, insert쿼리(수정된 필드값까지 고려된 insert문)만 나가면 더 효율적일 것 같은데 왜 insert와 update가 나가는건가요? 하이버네이트 특성이라면 왜 그렇게 동작해야만 하는지..알려주실 수 있을까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문, 주문상품 엔티티 개발 중에
cancel 메소드에서 getItem으로 쓰셨는데 그냥 getItem이 아닌 item으로item.addStock(count) 이렇게 쓰면 안되는 건가요?안된다면 이유는 무엇인가요??
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
13강 오류질문
URL문제라고 하는데,,잘 모르겠습니다 도와주세요!!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
코드 질문 드려요
orderitem.setOrder(this)여기서 this< 넘기는데setOrder(Order order) order로 받아요this 가 어떤정보를 넘기는건가요?Order 클래스 주소를 넘기나요? 자바 orm 표준 jpa 책 예제 보고잇는데요GitHub - holyeye/jpabookch06-model3 코드입니다.
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
404 페이지
안녕하세요 실습중 동작이 되지 않아서 문의드립니다.zuul server .yml 파일 및 gradle 파일server: port: 8000 spring: application: name: my-zuul-service zuul: routes: first-service: path: /first-service/** url: http://localhost:8081 second-service: path: /second-service/** url: http://localhost:8082 plugins { id 'java' id 'org.springframework.boot' version '2.3.9.RELEASE' id 'io.spring.dependency-management' version '1.0.11.RELEASE' } group = 'com.msa' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.cloud:spring-cloud-starter-netflix-zuul:2.2.3.RELEASE' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() } localhost:8081/welcome 요청시 정상적으로 오지만localhost:8000/first-service/welcome 요청시 404 에러떠러지고 있는데 이유를 모르겠어서 문의드립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
자바 버전 변경/각종 의존성 변경해도 해결되지가 않습니다 ㅜ
plugins { id 'java' id 'org.springframework.boot' version '2.7.1' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'jpabook' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' //추가 implementation 'org.springframework.boot:spring-boot-starter-validation' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //JUnit4 추가 testImplementation("org.junit.vintage:junit-vintage-engine") { exclude group: "org.hamcrest", module: "hamcrest-core" } } test { useJUnitPlatform() }
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]권장 순서 1번이 엔티티 조회 방식인데, 영한님이 이전 강의에서 웬만하면 DTO 방식으로 하라고 하신 것 같아서 헷갈려서 질문드립니다. 엔티티 방식은 모든 정보를 가져오기 때문에 사용하지 말라고 하신 것 같아서요
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]패치 타입을 lazy,eager 로 설정을 하는 것은 패치 조인 시에 어떤 식으로 join 이 될 지 결정하는 것으로 이해했는데 맞을까요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
실행시 갑자기 알수없는 아이디 비밀번호 질문
인텔리에서 실행하고난후에 포트 8080으로 잘 들어갔는데갑자기 이름 비밀번호를 물어보는데 어떤걸 적어야할까요?? 배포 한후에 이렇게 비번을 물어보는창이 떠서요!코드 수정한부분없고 db 연결 잘 되어있는데 어떤부분이 문제일까요? 배포 부분말고 제 컴터에서 돌리는 부분입니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRespositoryTest를 수행하는 과정 오류
MemberRespositoryTest를 수행하는 과정에 자꾸만 이런 에러가 뜹니다. 강의 자료에 나와있는 대로 그대로 옮겨도 보고 데이터베이스도 재설치하여 실행해 보았지만, 계속 같은 오류가 뜹니다..java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@4f811029 testClass = jpabook.jpashop.MemberRepositoryTest, locations = [], classes = [jpabook.jpashop.JpashopApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@5bd03f44, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@e056f20, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@2667f029, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@50b472aa, org.springframework.boot.test.context.SpringBootTestAnnotation@259ba296], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) at org.junit.runners.ParentRunner.run(ParentRunner.java:413) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Entity 'jpabook.jpashop.Member' has no identifier (every '@Entity' class must declare or inherit at least one '@Id' or '@EmbeddedId' property) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) ... 27 moreCaused by: org.hibernate.AnnotationException: Entity 'jpabook.jpashop.Member' has no identifier (every '@Entity' class must declare or inherit at least one '@Id' or '@EmbeddedId' property) at org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:266) at org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:210) at org.hibernate.cfg.annotations.EntityBinder.bindEntityClass(EntityBinder.java:260) at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:556) at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:216) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:247) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:290) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1816) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1766) ... 48 more MemberRepositoryTest.javaMemberRepository.java Member.java