묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
다대일 패치 조인 고민
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]다대일의 관계 패치 조인에 관련한 질문이 있습니다.사이드 프로젝트에서 모임과 참여 모임 테이블이 있습니다.참여 모임 테이블은 (userId, eventId)를 가지고 있습니다. 모임에 참여한 인원과 모임에 대한 정보를 얻고자 합니다.참여 모임을 모임 id로 탐색 하여 참여 모임 List를 얻어 참여 모임의 인원수를 알 수 있습니다.또한 패치 조인을 통하여 List<참여모임> 에 대한 모임의 정보를 얻을 수 있습니다.고민은 여기서 ToOne으로 가지고 오는 모임은 모두 같은것 입니다.이런 경우에도 패치조인을 통해 한번의 쿼리로 가져오는 것이 나은가요? 그래프 탐색이 가능 하도록 참여모임에 해당하는 모임을 넣는 과정이 모두 중복이라 이게 효율적인가?에 대한 고민 입니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
bytebuddyINterceptor 에 대해서 궁금한점이 있습니다.
api 2편을 수강중 궁금한게 있어서 질문올려요2편내용중에 public List<Order> ordersV1() { List<Order> all = orderRepository.findAllByString(new OrderSearch()); for (Order order : all) { order.getMember().getName(); //Lazy 강제 초기화 order.getDelivery().getAddress(); //Lazy 강제 초기화 } return all; }호출할때 member 지연로딩인경우 예외발생하던데그래서 hibernate5Module 모듈을 설정을했습니다. 그런데 1편엔 그런설정이 없는데 정상작동이 되는데 무슨차이가 있나요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
nohup.out 관련 문제
상단 디렉토리에 nohup.out 은 만들어졌는데 사이트에 접속도 안되고 nohup.out 파일 확인도 조금 이상합니다. [ec2-user@ip-172-31-39-4 ~]$ vi nohup.out[ec2-user@ip-172-31-39-4 ~]$ cat nohup.outError: Unable to access jarfile library-app_complete/build/libs/library-app-0.0.1-SNAPSHOT.jar[ec2-user@ip-172-31-39-4 ~]$ tail -f nohup.outError: Unable to access jarfile library-app_complete/build/libs/library-app-0.0.1-SNAPSHOT.jar이렇게 나옵니다. 혹시 몰라 위에있는 코드들도 첨부합니다. BUILD SUCCESSFUL in 2s1 actionable task: 1 executed[ec2-user@ip-172-31-39-4 library-app_complete]$ lsREADME.md build.gradle gradle gradlew gradlew.bat settings.gradle src[ec2-user@ip-172-31-39-4 library-app_complete]$ cd ..[ec2-user@ip-172-31-39-4 ~]$ lslibrary-app_complete[ec2-user@ip-172-31-39-4 ~]$ ps aux | grep javaec2-user 171942 1.8 34.0 2110252 330692 ? Ssl 06:40 1:07 /usr/lib/jvm/java-17-amazon-corretto.x86_64/bin/java --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.prefs/java.util.prefs=ALL-UNNAMED --add-opens java.prefs/java.util.prefs=ALL-UNNAMED --add-opens java.base/java.nio.charset=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED -XX:MaxMetaspaceSize=256m -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /home/ec2-user/.gradle/wrapper/dists/gradle-7.5-bin/f1w0cc9nuo0eivz97x2xlu9sv/gradle-7.5/lib/gradle-launcher-7.5.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 7.5ec2-user 175460 0.0 0.2 222316 2032 pts/0 S+ 07:40 0:00 grep --color=auto java[ec2-user@ip-172-31-39-4 ~]$ ^[[200~ nohup java -jar library-app/build/libs/library-app-0.0.1-SNAPSHOT.jar --spring.profile-bash: $'\E[200~': command not found[ec2-user@ip-172-31-39-4 ~]$ lslibrary-app_complete[ec2-user@ip-172-31-39-4 ~]$ nohup java -jar library-ap_bbbbbbbbbbu^Cd/libs/library-app-0.0.1-SNAPSHOT.jar -sspring.profile s.active=dev &[ec2-user@ip-172-31-39-4 ~]$ nohup java -jar library-ap_bpppp/^Cild/libs/library-app-0.0.1-SNAPSHOT.ja.profile s.active=dev &[ec2-user@ip-172-31-39-4 ~]$ nohu juuupnupoupgup upbuupuuup^Cava -jar library-app_compleate/build/libs/library-app-0.0.1-.active=dev &[ec2-user@ip-172-31-39-4 ~]$ nohup java -jar library-app_complete/build/libs/library-app-0.1-SNAPSHOT.jar --spring.profiles.active=dev &[1] 175532[ec2-user@ip-172-31-39-4 ~]$ nohup: ignoring input and appending output to 'nohup.out'[1]+ Exit 1 nohup java -jar library-app_complete/build/libs/library-app-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev[ec2-user@ip-172-31-39-4 ~]$ v1. nohup.out-bash: v1.: command not found[ec2-user@ip-172-31-39-4 ~]$ vi nohup.out[ec2-user@ip-172-31-39-4 ~]$ cat nohup.outError: Unable to access jarfile library-app_complete/build/libs/library-app-0.0.1-SNAPSHOT.jar[ec2-user@ip-172-31-39-4 ~]$ tail -f nohup.outError: Unable to access jarfile library-app_complete/build/libs/library-app-0.0.1-SNAPSHOT.jar vi nohup.out 를 했을 때는 E325: ATTENTIONFound a swap file by the name ".nohup.out.swp" owned by: ec2-user dated: Mon Feb 24 07:07:21 2025 file name: ~ec2-user/nohup.out modified: YES user name: ec2-user host name: ip-172-31-39-4.ap-northeast-2.compute.i process ID: 173572While opening file "nohup.out" dated: Mon Feb 24 07:43:35 2025 NEWER than swap file!(1) Another program may be editing the same file. If this is the case, be careful not to end up with two different instances of the same file when making changes. Quit, or continue with caution.(2) An edit session for this file crashed. If this is the case, use ":recover" or "vim -r nohup.out" to recover the changes (see ":help recovery"). If you did this already, delete the swap file ".nohup.out.swp" to avoid this message.Swap file ".nohup.out.swp" already exists![O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort: 이렇게 나옵니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 연관관계가 아닌 단방향 연관관계일때도
안녕하세요.양방향 연관관계 일때만 연관관계의 주인 이라는 개념이 있는줄 알았는데, 양방향 연관관계 뿐만 아니라 단방향 연관관계에서도 연관관계의 주인이라는 개념이 있는건가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
안녕하세요! 질문이 있습니다
안녕하세요. 강의 너무 잘 듣고 있습니다. 초장부터 이런식으로 질문드리는 거 안된다는 걸 잘알고 있지만 너무 죄송스럽게도 정말 도저히 모르겠는 부분이 있습니다.어차피 나중에 혼자 프로젝트도 진행해봐야 하니 저는 강의 자료가 아니고 직접 프로젝트를 만들어서 따라가보려고 start.io 페이지에서 만든 프로젝트를 인텔리제이에 불러오려고 했는데 빌드할 때 동기화 부분에서 실패합니다. 근데 이게 어떤 오류 메시지도 나오지 않고 저렇게 실패라고만 나와서 원인을 알기 어렵습니다. PC에 설치된 자바 버전 21로 3이상을 사용해야 하기 때문에 17이상으로 다시 설치했고 강의대로 따라했는데 혹시 강의 자료처럼 빌드가 완료되려면 강의 내용뿐만이 아니라 다른 설정이 더 필요한건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]h2 데이터베이스 연결하기 위해 다음과 같이 했는데 오류가 발생하고 접근이 안됩니다.프로젝트 위치는 E:\study\jpashop 여기입니다.어떤 설정을 해줘야하나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티와 dto에 대해 궁금한점이 있습니다
안녕하세요!엔티티와 dto에 대해 궁금한점이 생겨 질문드립니다!강의를보면 엔티티에 연관관계메서드와 로직 등 관련된 메서드를 작성하셨는데요그리고 엔티티는 외부에 노출되면 안된다라고 언급하셨는데그렇다면 엔티티를 직접쓰는게아닌 DTO를 따로 작성해서 사용하는건가요?(1번의 질문이 맞는질문이라면)그럼 엔티티에 10개의 필드들이 있고, 각각 조회용으로 6개의 필드, 수정용으로 8개의 필드가 필요하다고 가정하면 DTO를 조회용과 수정용 두개를 만들어야할까요?이건 좀 번외인거같긴하지만.... 지금까지 공부하면서 엔티티에 빌더패턴을 적용해왔는데요. 외부에 엔티티가 노출되지않으려면 DTO를 써야하고, 그렇다면 엔티티에 빌더패턴을 써야하는게아니라 DTO에 빌더패턴을 써야하는걸까요?
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
Querydsl 검색처리에서 테스트 결과가 잘 안 나오는 거 같습니다
로직 작성하고 테스트 실행해봤는데 카운트 쿼리까지는 실행된 거 같은데 todoDTO의 결과가 표시되지 않네요하단에 있는 실행 결과를 봐주시고 답변을 해주시면 감사드리겠습니다 혹시 더 필요한 게 있으시면 말씀해 주세요 > Task :clean> Task :compileJava> Task :processResources> Task :classes> Task :compileTestJava> Task :processTestResources NO-SOURCE> Task :testClasses11:41:34.918 [Test worker] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [org.zerock.apiserver.service.TodoServiceTests]: TodoServiceTests does not declare any static, non-private, non-final, nested classes annotated with @Configuration.11:41:34.987 [Test worker] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper -- Found @SpringBootConfiguration org.zerock.apiserver.ApiserverApplication for test class org.zerock.apiserver.service.TodoServiceTests . ____ _ __ _ _ /\\ / ___'_ __ _ ()_ __ __ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.4.1)2025-02-22T11:41:35.222+09:00 INFO 10348 --- [apiserver] [ Test worker] o.z.apiserver.service.TodoServiceTests : Starting TodoServiceTests using Java 21.0.5 with PID 10348 (started by zzamp in C:\Users\zzamp\Desktop\apiserver\apiserver)2025-02-22T11:41:35.223+09:00 INFO 10348 --- [apiserver] [ Test worker] o.z.apiserver.service.TodoServiceTests : No active profile set, falling back to 1 default profile: "default"2025-02-22T11:41:35.536+09:00 INFO 10348 --- [apiserver] [ Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.2025-02-22T11:41:35.578+09:00 INFO 10348 --- [apiserver] [ Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 35 ms. Found 1 JPA repository interface.2025-02-22T11:41:35.798+09:00 INFO 10348 --- [apiserver] [ Test worker] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]2025-02-22T11:41:35.837+09:00 INFO 10348 --- [apiserver] [ Test worker] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.4.Final2025-02-22T11:41:35.858+09:00 INFO 10348 --- [apiserver] [ Test worker] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled2025-02-22T11:41:36.016+09:00 INFO 10348 --- [apiserver] [ Test worker] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer2025-02-22T11:41:36.033+09:00 INFO 10348 --- [apiserver] [ Test worker] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...2025-02-22T11:41:36.084+09:00 INFO 10348 --- [apiserver] [ Test worker] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.mariadb.jdbc.Connection@7e1d8d412025-02-22T11:41:36.085+09:00 INFO 10348 --- [apiserver] [ Test worker] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.2025-02-22T11:41:36.116+09:00 INFO 10348 --- [apiserver] [ Test worker] org.hibernate.orm.connections.pooling : HHH10001005: Database info: Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] Database driver: undefined/unknown Database version: 10.11.10 Autocommit mode: undefined/unknown Isolation level: undefined/unknown Minimum pool size: undefined/unknown Maximum pool size: undefined/unknown2025-02-22T11:41:36.523+09:00 INFO 10348 --- [apiserver] [ Test worker] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)2025-02-22T11:41:36.558+09:00 INFO 10348 --- [apiserver] [ Test worker] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'2025-02-22T11:41:36.897+09:00 WARN 10348 --- [apiserver] [ Test worker] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning2025-02-22T11:41:37.114+09:00 INFO 10348 --- [apiserver] [ Test worker] o.z.apiserver.service.TodoServiceTests : Started TodoServiceTests in 2.018 seconds (process running for 2.672)Mockito is currently self-attaching to enable the inline-mock-maker. This will no longer work in future releases of the JDK. Please add Mockito as an agent to your build what is described in Mockito's documentation: https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#0.3WARNING: A Java agent has been loaded dynamically (C:\Users\zzamp\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy-agent\1.15.11\a38b16385e867f59a641330f0362ebe742788ed8\byte-buddy-agent-1.15.11.jar)WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warningWARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more informationWARNING: Dynamic loading of agents will be disallowed by default in a future release2025-02-22T11:41:37.366+09:00 INFO 10348 --- [apiserver] [ Test worker] o.z.a.repository.search.TodoSearchImpl : search1.................Hibernate: select t1_0.tno,t1_0.complete,t1_0.content,t1_0.due_date,t1_0.title from tbl_todo t1_0 order by t1_0.tno desc limit ?,?Hibernate: select count(t1_0.tno) from tbl_todo t1_02025-02-22T11:41:37.646+09:00 INFO 10348 --- [apiserver] [ Test worker] o.z.apiserver.service.TodoServiceTests : org.zerock.apiserver.dto.PageResponseDTO@11f81488Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended2025-02-22T11:41:37.658+09:00 INFO 10348 --- [apiserver] [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'2025-02-22T11:41:37.659+09:00 INFO 10348 --- [apiserver] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...2025-02-22T11:41:37.662+09:00 INFO 10348 --- [apiserver] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.> Task :testBUILD SUCCESSFUL in 5s5 actionable tasks: 5 executed오전 11:41:37: 실행이 완료되었습니다 ':test --tests "org.zerock.apiserver.service.TodoServiceTests.testGetList"'.
-
해결됨실전! Querydsl
Querydsl 설정과 검증 실패 제발 도와주세요....ㅠㅠ
package jpabook2.entity; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import lombok.Getter; import lombok.Setter; @Entity @Getter @Setter public class Hello { @Id @GeneratedValue private Long id; }plugins { id 'java' id 'org.springframework.boot' version '3.4.3' id 'io.spring.dependency-management' version '1.1.7' } group = 'jpabook2' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(23) } } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' //test 롬복 사용 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor """com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta""" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } tasks.named('test') { useJUnitPlatform() } clean { delete file('src/main/generated') }package jpabook2.jpashop2; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import jpabook2.entity.Hello; import jpabook2.entity.QHello; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import static org.assertj.core.api.Assertions.*; @SpringBootTest @Transactional class Jpashop2ApplicationTests { @Autowired EntityManager em; @Test void contextLoads() { Hello hello = new Hello(); em.persist(hello); JPAQueryFactory query = new JPAQueryFactory(em); QHello qHello = new QHello("h"); Hello result = query .selectFrom(qHello) .fetchOne(); Assertions.assertThat(result).isEqualTo(hello); } }Mockito is currently self-attaching to enable the inline-mock-maker. This will no longer work in future releases of the JDK. Please add Mockito as an agent to your build what is described in Mockito's documentation: https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#0.3 WARNING: A Java agent has been loaded dynamically (C:\Users\USER\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy-agent\1.15.11\a38b16385e867f59a641330f0362ebe742788ed8\byte-buddy-agent-1.15.11.jar) WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information WARNING: Dynamic loading of agents will be disallowed by default in a future release Unable to locate persister: jpabook2.entity.Hello java.lang.IllegalArgumentException: Unable to locate persister: jpabook2.entity.Hello at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:764) at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:745) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:320) at jdk.proxy3/jdk.proxy3.$Proxy105.persist(Unknown Source) at jpabook2.jpashop2.Jpashop2ApplicationTests.contextLoads(Jpashop2ApplicationTests.java:25) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) Caused by: org.hibernate.UnknownEntityTypeException: Unable to locate persister: jpabook2.entity.Hello at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.getEntityDescriptor(MappingMetamodelImpl.java:395) at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1512) at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:315) at org.hibernate.event.internal.EntityState.getEntityState(EntityState.java:64) at org.hibernate.event.internal.DefaultPersistEventListener.entityState(DefaultPersistEventListener.java:114) at org.hibernate.event.internal.DefaultPersistEventListener.persist(DefaultPersistEventListener.java:87) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55) at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127) at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:761) ... 9 more Unable to locate persister: jpabook2.entity.Hello org.hibernate.UnknownEntityTypeException: Unable to locate persister: jpabook2.entity.Hello at app//org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.getEntityDescriptor(MappingMetamodelImpl.java:395) at app//org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1512) at app//org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:315) at app//org.hibernate.event.internal.EntityState.getEntityState(EntityState.java:64) at app//org.hibernate.event.internal.DefaultPersistEventListener.entityState(DefaultPersistEventListener.java:114) at app//org.hibernate.event.internal.DefaultPersistEventListener.persist(DefaultPersistEventListener.java:87) at app//org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79) at app//org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55) at app//org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127) at app//org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:761) at app//org.hibernate.internal.SessionImpl.persist(SessionImpl.java:745) at java.base@23.0.1/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base@23.0.1/java.lang.reflect.Method.invoke(Method.java:580) at app//org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:320) at app/jdk.proxy3/jdk.proxy3.$Proxy105.persist(Unknown Source) at app//jpabook2.jpashop2.Jpashop2ApplicationTests.contextLoads(Jpashop2ApplicationTests.java:25) at java.base@23.0.1/java.lang.reflect.Method.invoke(Method.java:580) at java.base@23.0.1/java.util.ArrayList.forEach(ArrayList.java:1597) at java.base@23.0.1/java.util.ArrayList.forEach(ArrayList.java:1597) 작업 파일 구글 드라이브입니다.https://drive.google.com/file/d/18Qe7HzR8zWuy4KBJycRbtkXGed1LrQfl/view?usp=drive_link파일이름이 영상과 다른이유는 실습에서 querydsl 사용하기 위해서 다르게했습니다.persist 여기서 문제가 생기는거 같은데 해결 방법을 몰르겠습니다...제발 도와주세요 ㅠㅠ..
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
여러 개의 일대다 연관 관계 필드를 포함하는, 복잡한 DTO에 대한 최선의 쿼리 구현 방법이 있을까요..?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? - 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? - 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? - 예[질문 내용]안녕하세요! 마치 학교 선배가 옆에서 가르쳐주는 것과 같은 친근한 스타일의 강의 덕분에 백엔드 개발에 좀 더 가까워지는 느낌을 받고 있습니다! 다름이 아니라, 복잡한 구조를 가진 단일 엔티티 조회(DTO 프로젝션) API 개발 관련 질문이 있습니다! class MemberDto { private Long id; private String username; private String imageUrl; // 사용자가 작성한 총 게시물 수 private Long postCount; } // Post와 Hashtag는 다대다 연관 관계 - PostHashtag 중간 엔티티(중간 테이블) 추가 정의 class HashtagDto { private Long id; private String name; } // Post와 Category는 다대다 연관 관계 - PostCategory 중간 엔티티(중간 테이블) 추가 정의 class CategoryDto { private Long id; private String name; } // API로 조회를 제공하려는 대상 - 사용자(Member)가 작성할 수 있는 게시물. class PostDto { private Long id; private MemberDto member; private String title; private String body; private List<HashtagDto> hashtags; private List<CategoryDto> hashtags; } 여러 개(해시태그, 카테고리)의 컬렉션으로 데이터(도메인/엔티티)가 구성돼있을 때,PostDto findById(Long id)위와 같이 ID에 대한 게시물의 상세 정보를 조회하는 리포지토리 계층(PostRepository 같은 클래스)에서의 쿼리 메서드는 강의에서 말씀주신 것을 따르면, (컬렉션에 대한 페치 조인은 1번으로 제한되기에)Post 및 Post와 xToOne 연관 관계인 Member를 페치 조인으로 조회하는 쿼리Post와 xToMany 연관 관계인 모든 Hashtag를 Post.id로 조회하는 쿼리Post와 xToMany 연관 관계인 모든 Category를 Post.id로 조회하는 쿼리n개의 컬렉션이 있을 때 위와 같은 식으로 Post, Member를 제외한 n개의 컬렉션에 대한 n번의 쿼리를 실행해서, 마지막에 Dto로 조립하는 게 최선일까요? 한 방 쿼리(?)를 위해 DTO로 프로젝션하는 방식을 찾아보니, QueryDSL의 transform, groupBy, list 같은 것을 써서 구현한 개발한 블로그가 있긴 하던데, 막상 코드를 실행하니 안 되는 경우가 많더라고요..!실무에서도 위와 같이 여러 복잡한 xToMany 연관 관계 필드가 포함된 DTO를 조회하는 경우가 많을 것 같은데, 주로 어떤식으로 쿼리가 짜여지는지 궁금합니다!
-
해결됨코드로 배우는 React 19 with 스프링부트 API서버
섹션4 조회기능 질문입니다.
선생님, 덕분에 하루하루 조금씩 성장하고 있습니다. 감사힙니다섹션 4 조회 기능을 실행하면 아래와 같이 나오는데 해결 방법을 알고 싶습니다. x를 누르면 정상으로 보입니다. 건강하시기를 바랍니다. 감사합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의자료
깃허브에서 강의자료를 다운받았는데암호가 걸려있어서 굿노트에서 열리지도 않고 파일에서 필기도 안되고 인쇄도 안됩니다.암호 안걸려있는 강의자료를 받을 수 있을까요.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
hibernate5JakartaModule 의 이상한 결과에 대해 질문있습니다.
안녕하세요. 강의를 따라@JsonIgnore와 hibernate5JakartaModule 도 빈등록을 진행했습니다.아래 POSTMAN결과를 보면 첫 주문은 연관된 필드( orderItems)가 null로 잘 출력되는 것을 확인할 수 있었습니다. 비록 지금은 null로 출력됐지만 강제지연로딩을 설정하면 주문상품 요소들이 추가로 보여집니다.반면, 두 번째 주문은 주문상품들이 다 보여지고 있습니다.첫 번째 주문처럼 결과가 보여줘야할 것 같은데 말이죠.hibernate5JakartaModule 은 결과를 보장할 수 없는 것인지 궁금합니다.[ { "id": 1, "member": null, "orderItems": null, "delivery": null, "orderDate": "2025-02-21T07:23:38.479148", "status": "ORDER", "totalPrice": 50000 }, { "id": 2, "member": null, "orderItems": [ { "id": 3, "item": null, "orderPrice": 20000, "count": 3, "totalPrice": 60000 }, { "id": 4, "item": null, "orderPrice": 40000, "count": 4, "totalPrice": 160000 } ], "delivery": null, "orderDate": "2025-02-21T07:23:38.663151", "status": "ORDER", "totalPrice": 220000 } ]
-
해결됨코드로 배우는 React 19 with 스프링부트 API서버
REST 방식 컨트롤러 만들기(2)-LocalDateFormatter ㅠㅠ;
선생님, 안녕하세요~섹션 3. 스프링부트와 API서버 => REST 방식 컨트롤러 만들기(2)에서 4:06분 근처=> LocalDateFormatter에서 오류가 납니다. CustomServletConfig까지 작성하고 실행하면 아래와 같은 오류가 나옵니다.C:\backend2\serverapi\serverapi\src\main\java\org\zerock\serverapi\controller\formatter\LocalDateFormatter.java:12: error: type Formatter does not take parameterspublic class LocalDateFormatter implements Formatter<LocalDate> {^앞.뒤로 돌려보면서 찾아 보려 했는데 잘 모르겠습니다. LocalDateFormatter만드는 부분부터 오류가 납니다.죄송하지만 확인하시면 답변 부탁 드립니다.감사합니다. 코드 첨부합니다.package org.zerock.serverapi.controller.formatter; import org.hibernate.engine.jdbc.internal.Formatter; import java.text.ParseException; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.Locale; import static java.awt.SystemColor.text; public class LocalDateFormatter implements Formatter<LocalDate> { @Override public LocalDate parse(String Text, Locale locale) throws ParseException { return LocalDate.parse(text, DateTimeFormatter.ofPattern("yyyy-MM-dd")); } @Override public String print(LocalDate object, Locale locale) { return DateTimeFormatter.ofPattern("yyyy-MM-dd").format(object); } }
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
spring 부트 3.5 사용중인데 zuul 어떻게 해양할까요
deprecated돼서 spring initializr에 검색조차 안되는데그냥 강의 듣다보면 다른 해결방안 나오는건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
채번 쿼리 로그
안녕하세요.아래 강의 소스의 내용중 memberService.join메소드를 호출시 em.persist로 인해 select next value 시퀀스값을 가져오는 쿼리를 기대했습니다.@SpringBootTest(classes = JpashopApplication.class) @Transactional public class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Autowired EntityManager em; @Test @Rollback(value = false) public void 회원가입() throws Exception { System.out.println("MemberServiceTest.회원가입"); //given Member member = new Member(); member.setName("kim"); //when Long savedId = memberService.join(member); //then assertThat(memberRepository.findOne(savedId)).isEqualTo(member); } 하지만, 아래 소스 InitDb의 init메소드의 제거 여부에 따라위 시퀀스 채번쿼리가 나타났다 사라졌다 합니다.@Component @RequiredArgsConstructor public class InitDb { private final InitService initService; @PostConstruct public void init() { initService.dbInit1(); initService.dbInit2(); } .... }다른 분들 도 같은 현상을 겪는지 궁금하며 원인을 알고싶습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
컬렉션 필드에 대한 하이버네이트의 추적
안녕하세요.강의 13:00에서@OneToMany 컬렉션 필드를 하이버네이트가 변경사항을 추적한다는 말씀을 하셨습니다. 연관관계의 주인이 아닌 거울이기 때문에 컬렉션에 요소를 추가/제거 하더라도 테이블에 영향을 주지 않는데요. 즉 더티체킹을 하지 않는 것으로 이해했기 때문에 하이버네이트가 추적을 한다는 말씀이 잘 와닫지 않습니다. 제가 잘못이해한 것이 있는지 궁금합니다~!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
연관관계의 주인만 외래키를 관리할수 있다는 의미
안녕하세요. 연관관계 부분이 많이 헷갈리지만 확실히 알고 가고 싶어서 좀 더 공부하면서 알아보고 있다가 질문드릴게 있어서요..!강의에서 연관관계의 주인만 외래키를 관리할수 있다는 의미에 대해서 코드로 제가 이해한 바가 맞는지 직접 확인해보았는데요. 연관관계의 주인만 setTeam()메서드 등을 통해 외래키를 추가 및 변경할 수 있고, 연관관계의 주인이 아닌쪽은 외래키를 참조해서 조회만 할수 있다. 예를들어,Team team = new Team(); em.persist(team); Member member1 = new Member(); Member member2 = new Member(); Member member3 = new Member(); member1.setTeam(team); // 이렇게 해야함 member2.setTeam(team); // 이렇게 해야함 em.persist(member1); em.persist(member2); em.persist(member3); team.getMembers().add(member3); // 이렇게만 하면, member3의 외래키(TEAM_ID)가 설정되지않음. // 즉 member3의 team필드는 여전히 null이다. List<Member> newMembers = new ArrayList<>(); Member member4 = new Member(); em.persist(member4); newMembers.add(member4); team.setMembers(newMembers); // 이렇게만 하면, member4의 외래키(TEAM_ID)가 설정되지않음. // 즉 member4의 team필드는 여전히 null이다 tx.commit(); //그래서 위와같이하면, 이 상태로 db에 저장된다고 해도, 이후에 team.getMembers()를 호출하면, 리스트안에 member1, member2만 있고 member3과 member4는 없다. 이렇게 이해하는게 맞을까요..? 항상 질문에 답해주셔서 정말 감사드립니다..!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
다대다 관계 1:N, N:1 로 풀기
1. 강의 내용과 관련된 질문인가요? (예/아니오)네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]왜 주문과 상품은 1:N, N:1로 풀고, 카테고리와 상품은 풀지 않은 건가요? 둘 다 다대다 관계인데 어떤 의미가 있나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
오타 제보드립니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]JPA 기본편 강의 pdf 파일 (10. 객체지향 쿼리 언어 p.57)위 사진에서 화살표로 가리키고 있는 부분에 Team 엔티티의 별칭 t가 누락되었습니다..!