묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 데이터 JPA
fetch join 시 countQuery
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]22:00 @Query어노테이션안에 countQuery는 안넣고 그냥 @Query("select m from Member m left join fetch m.team t")으로만 썻는데 count쿼리가 join을 하지 않고 나가는데 이것도 하이버네이트가 버전 업 되면서 최적화 된거라고 봐도 좋을까요? 내용 추가합니다 ! left fetch join은 데이터의 수가 원래것보다 더 많아지지 않아서 left fetch join이든 left join이든 둘다 count할때는 join하지 않는건가요?
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
layout할때 css적용 같은건 그냥 다 따라 쳐야 하나요?
따로 코드가 있나요? 깃허브에 그 코드는 있는데 완성된 코드라 그런지 제가 보는 부분의 코드는 없는거 같아요(이 동영상 말고 다른 동영상에서)동영상이라 코드가 안보이는 부분이 있어서 따라 칠수 없을때도 있는데 어떤식으로 해야 하나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
쓰기지연저장소에 쿼리저장시점 관련 질문드립니다.
안녕하세요. 트랜잭션 커밋전에 쿼리를 생성해서 쓰기지연저장소에 저장하는것인지, 아니면 트랜잭션 커밋 이후 내부적으로 flush()호출 시 쿼리를 생성해서 쓰기지연 저장소에 저장하는것인지에 대해서 강의와 다른질문들, 구글링을 종합해보면 insert, update, delete를 할때에 쓰기지연저장소에 SQL쿼리를 생성해서 저장하는 시점이 약간 다른거같아서 아래와 같이 정리해 보았는데, 전체적으로 제가 이해한바가 맞는지 확인하고 싶어서 질문드립니다. 감사합니다. <update>0. em.find()나, em.persist()로 인해 이미 1차캐시에 있는 엔티티의 필드값 변경1. 트랜잭션 커밋. JPA는 트랜잭션을 커밋할때 변경된 엔티티 유무와 상관없이 항상 내부적으로 엔티티매니저의 flush()가 호출된다.2. 영속성컨텍스트의 엔티티와 스냅샷을 비교한다.3. UPDATE SQL을 생성해서 쓰기지연SQL저장소에 SQL쿼리를 저장한다.4. 쓰기지연SQL저장소에있는 쿼리를 데이터베이스에 전송(=flush)한다.5. 쓰기지연SQL저장소에있는 쿼리를 데이터베이스에 전송하고나서, 엔티티트랜잭션에 의해 트랜잭션이 커밋된다. <insert>1. em.persist()를 하면, 해당 엔티티가 1차캐시에 추가되고, INSERT SQL을 생성해서 쓰기지연SQL저장소에 SQL쿼리를 저장한다.2. 트랜잭션 커밋. JPA는 트랜잭션을 커밋할때 변경된 엔티티 유무와 상관없이 항상 내부적으로 엔티티매니저의 flush()가 호출된다.3. 쓰기지연SQL저장소에있는 쿼리를 데이터베이스에 전송(=flush)한다.4. 쓰기지연SQL저장소에있는 쿼리를 데이터베이스에 전송하고나서, 엔티티트랜잭션에 의해 트랜잭션이 커밋된다. <delete>1. em.remove()를 하면, 해당 엔티티가 1차캐시에서 제거되고, DELETE SQL을 생성해서 쓰기지연SQL저장소에 SQL쿼리를 저장한다.2. 트랜잭션 커밋. JPA는 트랜잭션을 커밋할때 변경된 엔티티 유무와 상관없이 항상 내부적으로 엔티티매니저의 flush()가 호출된다.3. 쓰기지연SQL저장소에있는 쿼리를 데이터베이스에 전송(=flush)한다.4. 쓰기지연SQL저장소에있는 쿼리를 데이터베이스에 전송하고나서, 엔티티트랜잭션에 의해 트랜잭션이 커밋된다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
쓰기지연저장소 쿼리 저장 시점 관련 질문드립니다.
강의 내용에서, 트랜잭션 커밋전에 em.persist나 em.remove를 하면, 영속성컨텍스트의 1차캐시에 값이 저장 또는 삭제되고, 쿼리를 생성해서 쓰기지연저장소에 저장한다고 하셨는데요. 트랜잭션 커밋전에 쿼리를 생성해서 쓰기지연저장소에 저장하는것인가요? 아니면 트랜잭션 커밋 이후 내부적으로 flush()호출 시 쿼리를 생성해서 쓰기지연 저장소에 저장하는것인가요??
-
해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
다중 데이터를 삭제 할 때
안녕하세요.호돌맨님 인강 들으면서 어찌저찌 취업하게 된 신입 개발자입니다. 현재 postDelete 로 단일 데이터를 검증 후 삭제하고있는데,만약 List로 된 다중 PK 를 검증하고 삭제할 때는 어느 방법이 좋은건지 잘 모르겠습니다. public void postAllDelete(List<Long> postIds) { //1번 List<Post> posts = postRepository.findAllById(postIds); if(posts.isEmpty()) throw new IllegalArgumentException("삭제할 게시글이 존재하지 않습니다."); postRepository.deleteAll(posts); //2번 postIds.forEach(e-> { Post post = postRepository.findById(e) .orElseThrow(PostNotFound::new); postRepository.delete(post); }); } 1번 같은 경우는 조회 및 삭제 각 한번씩 DB 를 호출해서 성능적으로 좋다고 생각하는데,리스트에 담겨져있는 PK 가 유효한지 검증하려면 stream API 를 사용하여 map 으로 PK 추출 후 filter 로 검증을 하는게 좋은건지, 혹은 다른 방법이 있는지 궁금합니다 물론 현재는 데이터가 많이 없으니 어느 방법을 채택해도 상관없지만추후에 대량의 데이터를 접하게될 때를 생각하다보니,, 어떻게 보면 인강과 관련없는 질문이긴한데,,염치 불구하고 도움 주시면 감사하겠습니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
Static한 Utill성 클래스는 어떻게 테스트 할 수 있나요?
개발을 하다보면 utill성 클래스도 테스트하고 싶은데 배운거는 spring을 띄워서 테스트 하는데 static도 비슷하게 작성하면 되는건지 아니면 이것도 private에서 이야기 하신거처럼 신경 안써도 되는 부분일까요? 좀 더 좋은 방법이 있을거 같아서 여쭤봅니다
-
미해결
ERD 매핑 관계 질문(ManyToMany 매핑 사용여부)
안녕하세요 숨고와 같이 게시판이 여러개 있을 경우 예를들어 특정게시판에서 게시글에 대한 필터링 밑에 사진 2개처럼 분야와 위치에 관해 필터링해서 게시글을 볼 수 있는 경우 이렇게 하는 것 말고는 답이 없나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
ERD 설계 질문
숨고와 같은 구인 구직 사이트인데 특정 작물에 대한 전문가와 매칭해주고 견적이 나오는 서비스를 프로젝트로 만들려고 생각중입니다. 이렇게 종류를 선택하면(위에 사진1에서 아래 사진2으로 넘어감니다.) 서비스일 경우 이런 카테고리는 따로 erd를 만들어 주어야 하나요? 아니면 enum으로 빼는 건지 감이 정말 1도 안 잡혀서 질문 드립니다. 견적 엔티티를 이런식으로 만들고 컨설팅 형태 이런 것도 enum으로 만드나요?나머지는 속성값으로 들어가는 것은 알고 습니다.) 그리고 맨 밑에 경우 만약 사진하고 글을 같이 첨부해서 컨설팅 내용을 신청할경우 이것도 erd로 따로 빼 놓나요?( aws 로 작업할경우 s3로 이미지만 따로 저장하는 것은 알 고 있습니다.)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderController 에서 {orderId} 경로변수 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 강의를 듣던 중 궁금한 내용이 생겨 질문합니다.<td> <a th:if="${item.status.name() == 'ORDER'}" href="#" th:href="'javascript:cancel('+${item.id}+')'" class="btn btn-danger">CANCEL</a> </td> function cancel(id) { var form = document.createElement("form"); form.setAttribute("method", "post"); form.setAttribute("action", "/orders/" + id + "/cancel"); document.body.appendChild(form); form.submit(); }위 자바 스크립트 코드를 보면, post 방식으로 전송할때, item.id 를 cancel 함수의 매개변수로 전달하고, 이 item.id 가 /orders/id/cancel 에 들어갑니다. @PostMapping("/orders/{orderId}/cancel") public String cancelOrder(@PathVariable Long orderId){ orderService.cancelOrder(orderId); return "redirect:/orders"; }반면에 , OrderController 의 위 메소드에서는 , 경로변수가 {orderId} 로 설정이 되어있습니다. 왜 itemId 를 받아와서 orderId 로 사용하는 것인지 궁금합니다. 만약 그것이 아니라면 제가 어떤 부분을 놓치고 있는 것인지 궁금합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
프록시 객체 질문 있습니다.
em.getReference() 를 호출하면, 프록시 객체를 1차 캐시에 저장하고, 해당 프록시 객체를 반환em.find() 를 호출하면, 실제 엔티티 객체를 생성하고 프록시 객체를 초기화 이런식으로 동작하는데2번 과정에서 생성된 실제 엔티티 객체는 1차 캐시에 저장되는지 안되는지가 궁금합니다초기화된 프록시 객체에서 setXXX() 같은 메서드를 호출하면 프록시 객체에 연결된 실제 엔티티의 setXXX() 메서드가 호출될텐데, 이런 경우 update 쿼리가 나가는 것을 보니까 실제 엔티티를 영속성 컨텍스트에서 관리해주고 있는 것 같긴한데프록시 객체와 실제 엔티티 객체의 id값이 같은데 1차 캐시에 두 개 다 저장되는게 맞는건가 싶어서 질문드립니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
묵시적 조인이 안일어나는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]13:50 쯤에 oi.order.id 부분에서 묵시적 조인이 안일어나는 이유가 orderItem에서 order로가는 외래키가 있어서가 맞나요? 다른 필드에 접근하면 묵시적 조인이 일어나는지 궁금합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
변경감지 flush에 대해 질문드립니다.
안녕하세요. 22분경, 변경감지 관련해서 질문드립니다.순서도를 보면 flush가 두번 있어서 이 부분이 이해가 되지않아서 질문드립니다. 비슷한 다른 질문들을 찾아봤지만 이해가 되지않아서 추가적으로 질문드립니다. 1. 전체적으로아래와 같이 이해하면될까요?JPA는 트랜잭션을 커밋할때 flush()가 호출된다.영속성컨텍스트의 엔티티와 스냅샷을 비교한다.UPDATE SQL을 생성해서 쓰기지연SQL저장소에 SQL쿼리를 저장한다.쓰기지연SQL저장소에있는 쿼리를 flush를 통해 쿼리를 데이터베이스에 전송한다.트랜잭션이 커밋된다 2.또, 추가적으로 위와 같이 이해하게 되면, 트랜잭션을 커밋할때 flush를 두번 호출하는것일까요? 두 flush가 어떤 차이인지 궁금해서 질문드립니다. 3.4번에 있는 flush는 쓰기지연SQL저장소에 UPDATE쿼리가 있어서 flush하는것으로 보면 될거같은데, 첫번째 flush는 왜 flush를 해주는것인지 이해가 되지않아 질문드립니다..
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
트랜잭션이 없는 상태에서 조회
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]5:30초 에서 order.getOrderItems().stream()하는 부분에서 orderItem에 있던 Item들에 값이 들어가는것으로 알고있는데, 이는 @Transactional 이 있는 Service계층이 아니라 Repository계층에서 불렀기 때문에 프록시 객체가 들어간것이 맞나요? @Transactional 어노테이션이 없는 계층에서 em.find()나 createQuery()같은 메소드를 호출해도 되는지와 왜 트랙잭션이 없을때 item에 대한 값을 얻을수있는지 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Controller가Repository에 의존해도 되나요?
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Contoller에서 Service를 의존하는게 아니라 Repository에 의존해도 되나요?? 예제라서 단순화 한건지 아니면 다른 프로젝트에서도 동일하게 Controller에서 Repository로 접근해도 되는지 궁금합니다. 이전에 비슷한 질문을 본것같은데 답변을 못찾아서 질문 남깁니다!
-
해결됨Practical Testing: 실용적인 테스트 가이드
동시청 처리 문의드립니다.
이전 강의 부터 동시성 문제에 대해서 논하셔서 문의 드립니다.보통 서비스 구현시 최종 병목지점은 DB로 귀결되기 마련인데과금테이블과 같이 비관적락을 이용해야 하는 경우, 캐시등을 이용이 불가하여 어쩔수 없느니 스케일업 하는 방법을 이용합니다. 마스터, 슬레이브 로 나눈다고 해도 동시성을 보장할수 없는 경우가 많은데요. 이런 경우 해결 방안으로 어떤것이 있는지 고견을 여쭙고자 합니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
Entity에 @RequiredArgsConstructor(access = AccessLevel.PROTECTED)
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. Entity 객체에 @RequiredArgsConstructor(access = AccessLevel.PROTECTED)로 설정해주는 이유가 외부에서 객체의 생성을 제한하려는 의도인것 같은데요final 키워드를 가진 instance가 없는데도 RequiredArgsConstructor 를 사용한 의도가 있는지 궁금합니다.아직 강의 후반까지는 보지않은 상태이긴하지만final 키워드가 없으면 결국 NoArgsConstructor랑 같은 동작을 하는것이 아닌가해서요
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
오류 도와주세요 ..제발 도와주세요 ㅠㅠ
어제까지 잘 됐는데 갑자기 오늘부터 서버실행시 오류가 나는데 찾아봐도 모르겠어서 남깁니다 .. 제발 도와주세요.다음 진도를 못 나가고 있습니다 ㅠㅠ
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
h2 database 버전 2.3.232
안녕하세요, 현재 3 챕터에서 프로젝트 생성 중입니다. 그런데 강의 중 prom.xml 파일에서 h2 database의 버전을 현재 h2 database 에서 다운 받은 버전과 같게 맞추라고 나와있어 현재 소스 코드에는 2.2.224 로 나와있지만 2.3.232 (현재 다운 받고, 실행한 데이터베이스의 버전) 으로 바꾼 다음 reflesh 하고 돌려보니 화면과 같은 오류 메세지가 뜹니다.C:\Users\김민경\.jdks\temurin-21.0.5\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2024.2.1\lib\idea_rt.jar=2890:C:\Program Files\JetBrains\IntelliJ IDEA 2024.2.1\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\Users\김민경\Downloads\ex1-hello-jpa-start\ex1-hello-jpa\target\classes;C:\Users\김민경\.m2\repository\org\hibernate\orm\hibernate-core\6.4.2.Final\hibernate-core-6.4.2.Final.jar;C:\Users\김민경\.m2\repository\jakarta\persistence\jakarta.persistence-api\3.1.0\jakarta.persistence-api-3.1.0.jar;C:\Users\김민경\.m2\repository\jakarta\transaction\jakarta.transaction-api\2.0.1\jakarta.transaction-api-2.0.1.jar;C:\Users\김민경\.m2\repository\org\jboss\logging\jboss-logging\3.5.0.Final\jboss-logging-3.5.0.Final.jar;C:\Users\김민경\.m2\repository\org\hibernate\common\hibernate-commons-annotations\6.0.6.Final\hibernate-commons-annotations-6.0.6.Final.jar;C:\Users\김민경\.m2\repository\io\smallrye\jandex\3.1.2\jandex-3.1.2.jar;C:\Users\김민경\.m2\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;C:\Users\김민경\.m2\repository\net\bytebuddy\byte-buddy\1.14.7\byte-buddy-1.14.7.jar;C:\Users\김민경\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\4.0.0\jakarta.xml.bind-api-4.0.0.jar;C:\Users\김민경\.m2\repository\jakarta\activation\jakarta.activation-api\2.1.0\jakarta.activation-api-2.1.0.jar;C:\Users\김민경\.m2\repository\org\glassfish\jaxb\jaxb-runtime\4.0.2\jaxb-runtime-4.0.2.jar;C:\Users\김민경\.m2\repository\org\glassfish\jaxb\jaxb-core\4.0.2\jaxb-core-4.0.2.jar;C:\Users\김민경\.m2\repository\org\eclipse\angus\angus-activation\2.0.0\angus-activation-2.0.0.jar;C:\Users\김민경\.m2\repository\org\glassfish\jaxb\txw2\4.0.2\txw2-4.0.2.jar;C:\Users\김민경\.m2\repository\com\sun\istack\istack-commons-runtime\4.1.1\istack-commons-runtime-4.1.1.jar;C:\Users\김민경\.m2\repository\jakarta\inject\jakarta.inject-api\2.0.1\jakarta.inject-api-2.0.1.jar;C:\Users\김민경\.m2\repository\org\antlr\antlr4-runtime\4.13.0\antlr4-runtime-4.13.0.jar;C:\Users\김민경\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\김민경\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar hellojpa.JpaMain1월 05, 2025 11:49:47 오전 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformationINFO: HHH000204: Processing PersistenceUnitInfo [name: hello]1월 05, 2025 11:49:47 오전 org.hibernate.Version logVersionINFO: HHH000412: Hibernate ORM core version 6.4.2.Final1월 05, 2025 11:49:47 오전 org.hibernate.cache.internal.RegionFactoryInitiator initiateServiceINFO: HHH000026: Second-level cache disabled1월 05, 2025 11:49:47 오전 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configureWARN: HHH10001002: Using built-in connection pool (not intended for production use)Exception in thread "main" org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to load class [org.h2.Driver] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:276) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) at org.hibernate.boot.model.relational.Database.<init>(Database.java:45) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:223) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:191) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:170) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1432) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1503) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:55) at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:80) at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) at hellojpa.JpaMain.main(JpaMain.java:9)Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [org.h2.Driver] at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:126) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.loadDriverIfPossible(DriverManagerConnectionProviderImpl.java:211) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildCreator(DriverManagerConnectionProviderImpl.java:112) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:93) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:82) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:136) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:247) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:395) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:262) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:107) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ... 12 moreCaused by: java.lang.ClassNotFoundException: Could not load requested class : org.h2.Driver at org.hibernate.boot.registry.classloading.internal.AggregatedClassLoader.findClass(AggregatedClassLoader.java:216) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:593) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:534) at java.base/java.lang.Class.forName(Class.java:513) at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:123) ... 25 moreCaused by: java.lang.Throwable at org.hibernate.boot.registry.classloading.internal.AggregatedClassLoader.findClass(AggregatedClassLoader.java:209) ... 31 more Suppressed: java.lang.ClassNotFoundException: org.h2.Driver at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) at org.hibernate.boot.registry.classloading.internal.AggregatedClassLoader.findClass(AggregatedClassLoader.java:206) ... 31 more Suppressed: java.lang.ClassNotFoundException: org.h2.Driver at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) at org.hibernate.boot.registry.classloading.internal.AggregatedClassLoader.findClass(AggregatedClassLoader.java:206) ... 31 more Suppressed: java.lang.ClassNotFoundException: org.h2.Driver at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) at org.hibernate.boot.registry.classloading.internal.AggregatedClassLoader.findClass(AggregatedClassLoader.java:206) ... 31 moreProcess finished with exit code 1 어떻게 하면 될까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 코드에서 @Transaction사용 시 delete 쿼리가 나가지 않습니다.
안녕하세요. 강의를 수강하며 따로 게시판을 만들어보는중에 문제가 발생하여 질문드립니다.다름이 아니라 테스트 코드 작성중에 em.delete()를 사용하는 부분에서 궁금증이 생겨 질문 남깁니다.아래는 테스트 코드가 작성 된 부분입니다.회원을 만들고 게시글을 작성하고 이 게시글을 삭제하도록 하였습니다.PostService의 deletePost, PostRepository의 delete를 사용하여 게시글의 id를 입력받아 삭제하는 구조로 작성하였습니다.여기서 테스트를 실행 시키면 테스트가 실패합니다. 기대값은 0인데 실제로 1이되어 있다고 나옵니다.로그를 통해 확인해보면 delete 쿼리가 작동하지 않았습니다. 하지만 테스트 클래스의 @SpringBootTest아래의 @Transactional을 삭제하고 실행 시키면delete 쿼리가 작동하고 테스트가 정상 동작합니다. @Transactional을 사용하면서 delete문이 제대로 작동하도록 할 수 있을까요?웹 서핑을 하며 테스트 해본 것입니다.1. em.flush()2. @Rollback(value=false)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
org.springframework.boot:spring-boot-starter-aop 폴더가 없는 문제
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요? 환경 설정 중 org.springframework.boot:spring-boot-starter-aop 폴더가 없어아래 코드를 build.gradle에 추가했으나 수업에서 다뤄주셨던 의존관계처럼 업데이트되지 않고 있습니다.어떻게 해결해야 할까요?implementation 'org.springframework.boot:spring-boot-starter-aop' 강의 내용에서 나오는 이 부분과 같지 않습니다.