묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
JPA physical-strategy 변환이 안되는 이유가 어떤게 있을까요???
안녕하세요. 스프링부트3 기반으로 api 프로젝트를 셋팅 중 입니다. 그런데 셋팅 중 physical-strategy 이 제대로 동작하지 않아서 이것저것 해보다가도움을 구해보고자 글을 올리게 되었습니다. 우선 프로젝트 환경은스프링부트 = 3.2.2하이버네이트 = 6.3.1.FinalJava = corretto17입니다. application.yml 은 이렇게 설정되어 있습니다. Entity는 카멜케이스로 작성이 된 상태 입니다. DB는 스네이크로 네이밍이 되어 있는 상태입니다. 그런데 JPA 조회 쿼리를 날리면계속 카멜케이스로 조회가 되면서 오류가 발생해서이것저것 해보는데 해결이 안되서 도움을 구해보고자 합니다. 혹시 뭔가 놓치고 있는게 있을까요???
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
Movie 엔티티 조회 시 실행되는 SQL Query가 강의 영상과 상이한 이슈에 대한 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 고급 매핑 - 상속관계 매핑 강의 영상 16:15 부분에서 Movie 엔티티 조회 코드 실행 결과로 출력되는 SQL Query와 저의 프로젝트의 코드 실행 결과로 출력되는 SQL Query가 상이하여 질문드립니다. 우선 프로젝트 생성은 2024 최신 버전으로 프로젝트 설정하기 문서를 참고해서 진행하였으며, 아래와 같이 작성한 코드 일부와 실행 결과로 출력되는 SQL Query를 첨부드립니다.Movie findMovie = em.find(Movie.class, movie.getId());select m1_0.id, m1_1.name, m1_1.price, m1_0.actor, m1_0.director from Movie m1_0 join Item m1_1 on m1_0.id=m1_1.id where m1_0.id=?위와 같이 강의 영상처럼 SELECT문의 형태가 MOVIE 테이블과 ITEM 테이블의 INNER JOIN이 아닌 INNER JOIN을 직관적(?)으로 나타내고 있지 않는데요. 한가지 예상되는 건 2024년도 기준 프로젝트 생성 시 하이버네이트, H2 DB 버전이 강의 내용에서 다루는 버전들보다 업그레이드 되어 동작 방식이 달라져서 그런게 아닐까 생각이 듭니다. 이 부분이 맞다면 만약, 강의와 동일한 SQL Query를 출력해 보고 싶다면 프로젝트에서 사용중인 라이브러리 버전들을 다운그레이드하는 방법밖에는 없을까요?<!-- TODO s:pom.xml 코드 일부 --> <properties> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- JPA 하이버네이트 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>6.4.2.Final</version> </dependency> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <!-- H2 데이터베이스 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>2.2.224</version> </dependency> </dependencies> <!-- TODO e:pom.xml 코드 일부 -->
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
SEQUENCE 전략 초기값과 호출 횟수 문의드립니다.
안녕하세요. 강의 열심히 듣고 있는 주니어 개발자입니다.강의 내용 똑같이 수행했으나 시퀀스 값이 다른 점이 있어 문의드립니다.(33:05) 부분에서 시퀀스 전략 속성값 initialValue=1, allocationSize=50 으로 설정했을시 persist 이전에 초기값이 -49라고 나오지만 제 환경에서는 초기값이 1로 나옵니다. H2 DB 2.1.214, Hibernate 5.6.10을 사용중인데 혹시 버전이 달라서 그런걸까요?로그에는 시퀀스에 대한 call next value를 호출하지 않으며 제 생각에도 initialValue=1로 명시되어 있기 때문에 초기값이 1인게 정상인 것 같은데 제가 놓치는 부분이 있는지 문의드립니다. 위 질문의 연장선으로 persist 1번 수행시 call next value 수행 결과는 아래와 같은데요. DB 시퀀스 자체의 increment값이 50이어서 51이 되는것은 이해하였습니다. JPA에서 51번째 데이터까지는 DB 시퀀스를 참조하지 않고 메모리에서 꺼내와야하는데 persist로 객체를 2번 저장시 아래와 같이 call next value가 2번 호출이 되고 시퀀스 값은 101이 됩니다.(33:43) 여기서 2번 호출 되는 이유가 JPA 애플리케이션에서 사용하는 allocationSize가 50이기 때문에 추후 자신이 사용할 메모리 시퀀스값을 선점하기 위해서라고 이해했는데요. (DB에는 51로 증가시켜놓고, 2부터 51까지 사용하기 위함) 이렇게 되면 제 경우에는 2를 사용하기 위해서 시퀀스 값을 101로 올려놓는 이상한 동작을 하는 것인데 이해가 가지 않습니다. 또한 위와 같이 52번째 객체 저장시 call next value가 한번 더 수행되어 시퀀스 값은 151이 됩니다.의도한대로 작동은 하지만 시퀀스가 한단계씩 밀려서 작동한다는 것이 이해가 가지 않습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
ENUM 타입 조회가 안됩니다
실습 도중 여러가지를 해보다 문제가 발생하여 질문드립니다. SQL 쿼리를 통해 조회할 경우 값이 보이나 JPQL을 실행할 경우 ENUM 컬럼 자체를 조회하지 못하는 문제가 있습니다. P.S. SELECT concat('', o.status) FROM Order as o JPA 쿼리를 위와 같이 비틀어서 사용하면 정상적으로 출력됨을 확인하였으나, 엔티티 자체를 select 하거나 new 키워드를 통해 VO, DTO 클래스 생성자로 매핑하는 방식은 불가능했습니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
autocommit과 connection 획득 지연에 대해
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용] 안녕하세요. 먼저 좋은 강의 제작해주셔서 많은 도움이 되었고, 감사드립니다! osiv 를 설명해주신 강의에서, osiv가 켜져있으면 커넥션을 오래 물고 있어 트래픽이 많으면 장애가 발생할 수 있다고 하셨는데요. 같은 맥락으로 커넥션을 릴리즈하는 시점이 아닌 획득 하는 시점에서도 1. datasource에서 커넥션 autocommit을 false로 설정하고, (디폴트는 true) 2. 하이버네이트에게 트랜잭션 시작(그리고 종료) 시 set autocommit를 수행하지 않도록 해서(hibernate.connection.provider_disables_autocommit 옵션으로 하이버네이트에게 알려줌) 커넥션 획득을 지연시키고 불필요한 SET 문 실행을 없애, 결과적으로 커넥션 점유 시간을 줄이면서 리소스 사용과 쓰루풋 최적화가 가능하다고 합니다. 참고한 자료 - https://vladmihalcea.com/why-you-should-always-use-hibernate-connection-provider_disables_autocommit-for-resource-local-jpa-transactions/ - https://github.com/spring-projects/spring-boot/issues/9261 - https://pkgonan.github.io/2019/01/hibrnate-autocommit-tuning - https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/appendices/Configurations.html 그래서 위 자료들에 따르면 일반적인 스프링 부트 2 + 하이버네이트 조합을 쓰는 경우에는 datasource의 autocommit을 항상 false로 하는 것이 좋을 것 같은데(이 경우 hibernate.connection.provider_disables_autocommit는 자동으로 enable 설정됨), 혹시 이 설정에 대한 경험이 있으신지, 있으시다면 조심해야할 사이드이팩트는 없으셨는지 궁금해서 질문남겨봅니다. (늦더라도 영한님께서 직접 답변해주시면 좋을 것 같습니다^^) 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
java.lang.NoSuchMethodError 에러가 해결이 안됩니다..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 간단한 예제 작성이고, 기존에 잘 진행하던 H2 DB인데, 어느날 부터 갑자기 이런 오류 메세지가 뜨면서 테이블생성은 되나 입력 값이 전혀 들어가지 않는 오류가 발생하기 시작하였습니다. 이유를 도저히 찾을수가 없어서 질문 올립니다. 답 해주시면 감사하겠습니다. Hibernate: drop table if exists Item CASCADE 5월 07, 2022 2:09:36 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@2102a4d5] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. Hibernate: drop table if exists Member CASCADE Hibernate: drop table if exists OrderItem CASCADE Hibernate: drop table if exists ORDERS CASCADE Hibernate: drop sequence if exists hibernate_sequence Hibernate: create sequence hibernate_sequence start with 1 increment by 1 5월 07, 2022 2:09:36 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@1e886a5b] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. Hibernate: create table Item ( ITEM_ID bigint not null, name varchar(255), price integer not null, stockQuantity integer not null, primary key (ITEM_ID) ) Hibernate: create table Member ( MEMBER_ID bigint not null, city varchar(255), name varchar(255), street varchar(255), zipcode varchar(255), primary key (MEMBER_ID) ) Hibernate: create table OrderItem ( ORDER_ITEM_ID bigint not null, count integer not null, ITEM_ID bigint, ORDER_ID bigint, orderPrice integer not null, primary key (ORDER_ITEM_ID) ) Hibernate: create table ORDERS ( ORDER_ID bigint not null, MEMBER_ID bigint, orderDate timestamp, status varchar(255), primary key (ORDER_ID) ) 5월 07, 2022 2:09:36 오후 org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] 5월 07, 2022 2:09:36 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stop INFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/jpashop] Exception in thread "main" java.lang.NoSuchMethodError: org.hibernate.annotations.common.reflection.ReflectionManager.reset()V at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:414) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:471) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1498) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at jpabook.jpashop.JpaMain.main(JpaMain.java:14)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberServiceIntegrationTest 테스트 실행오류
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요. 강의와 커뮤니티 잘 공부하고 있어요. 지금까지 오류없이 잘오다가 테스트에서 오류가 나는데 hibernate관련인듯 한데 정확히 잘 모르겠어요. 회원가입(gaYip)테스트인데 전체 에러는 아래와 같아요. ---------------------------------------------------- java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:248) at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$6(ClassBasedTestDescriptor.java:350) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:355) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$7(ClassBasedTestDescriptor.java:350) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312) at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:349) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$4(ClassBasedTestDescriptor.java:270) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:269) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$2(ClassBasedTestDescriptor.java:259) at java.base/java.util.Optional.orElseGet(Optional.java:364) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$3(ClassBasedTestDescriptor.java:258) at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:101) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:100) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:65) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$1(NodeTestTask.java:111) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:111) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:79) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:71) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) 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]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:123) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) ... 67 more Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:275) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152) at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:176) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:127) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1224) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255) at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) 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:341) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ... 82 more Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100) at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ... 99 more 혹시 몰라서 재부팅도 해보고 그래들 새로고침도 하고 H2도 다시 연결해보았는데 성공이 안되네요. get()에서 null값 관련한거 같은데 정확히 모르겠어요. 어떤게 오류일까요? 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
MySQL Dialect 커스텀 관련해서 문의드립니다. (group_concat)
안녕하세요. 영한님 오랜만에 인사드립니다. MySQL Dialect 중 하나인 group_concat을 추가하여 사용해야 하는 상황이라.. 다음과 같이 Custom을 만들고 프로퍼티로 해당 CustomDialect까지 등록되어 정상 동작하는 상황입니다. public class CustomMySQL57Dialect extends MySQL57Dialect { public CustomMySQL57Dialect() { registerFunction("GROUP_CONCAT", new StandardSQLFunction("group_concat", StandardBasicTypes.STRING)); } } 문제는, Native Query로는 `GROUP_CONCAT(DISTINCT xxx)` 처럼 사용이 가능하나, QueryDSL을 이용한 상황에서 해당 DISTINCT가 동작하지 않습니다.. 위와 같은 상황을 겪어보셨을 지 않을까 싶어 여쭤봅니다! QueryDSL 코드 중 일부는 다음과 같습니다. select(Projections.constructor(PaymentFilterConditionDTO.class, transaction.merchantMemberNo, Expressions.stringTemplate("group_concat(DISTINCT {0})", new CaseBuilder().when(transaction.userType.eq(UserType.LINE_PAY)) .then(transaction.transactionType.stringValue() .concat(transaction.paymentMethod.stringValue())) .otherwise(transaction.transactionType.stringValue().concat(transaction.paymentMethod.stringValue()) .concat(SUFFIX_AFFILIATE))))) from(...) where(...) 위의 QueryDSL 코드에서 DISTINCT가 제외되면 예외없이 동작하구요. DISTINCT가 있을 때는 다음과 같이 예외가 발생합니다. - unexpected token : group_concat - unexpected token : DISTINCT 항상 도움주셔서 다시 한 번 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
엔티티가 아닌 DTO로 변환을 할 때 컬렉션 조회를 할 경우 @JsonIgnore가 필요로 하는상태가 생겼습니다.
API 개발 고급 - 컬렉션 조회 최적화에서 주문 조회 V2: 엔티티를 DTO를 변환 수업에서 4:30 에 No properties문제가 발생하여 저도 getter를 넣었으나 다음과 같은 에러가 발생했습니다. 구글링 한 결과 해당 컬렉션이 지연 로딩으로 인해 프록시 객체를 serialize하기 때문에 나는 에러라고 합니다. 그래서 제가 조치한 것은 해당 에러가 발생하는 @OneToMany필드를 @JsonIgnore를 했습니다. 다행히 정상 작동은 했으나 김영한님의 강의에서도 그렇고 제가 개인적으로 하는 프로젝트에서도 단 한번도 Entity에 @JsonIgnore를 사용하지 않았습니다. 단순히 DTO에 getter를 사용했는데 작동이 잘 되었습니다. 어떻게 하면 Entity에 @JsonIgnore를 사용하지 않고 문제를 해결할 수 있을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Hibernate Query
Hibernate: /* insert hellojpa.Movie */ insert into Item (name, price, id) values (?, ?, ?) 안녕하세요 영한님 콘솔창에 Hibernate에서 날라가는 Query에서 values 부분이 (?, ?, ?)로 나오는데 이것을 제가 코드에서 넣은 값으로 나오게는 못하나요?
-
미해결스프링 데이터 JPA
update 시 alter table account add column에서 그 뒤로 진행되지 않습니다.
JPA 프로그래밍 1. 프로젝트 세팅 강의를 따라하던 중 제 코드는 진행되지 않아서 문의 드립니다. database는 mySQL을 사용하였고, application.properties에서 ddl-auto를 update로 변경 후 실행하니 console에서 Hibernate: alter table account add column email varchar(255) 에서 아무 일도 일어나지 않습니다. 서버가 꺼지지도 않고 에러없이 JpaRunner 내의 run 함수에 접근을 하지 못하는 상태로 보입니다. 또한, 테이블 구조에는 변화가 없습니다. 이 문제를 어떻게 해야 해결할 수 있을까요? 제 application.properties입니다. 제 pom.xml 코드입니다. 마지막으로 코드 실행 시 나타나는 콘솔창입니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
doma Seasar 라는 것에 대해~
안녕하세요. 강의 진행 자체와는 무관한 질문일 수도 있으니, 영한님 여유 되실 때 간단히(?) 답변 부탁드립니다. JAVA ORM 표준이 JPA인데 그 구현체로 많이 쓰이고, 강사님도 강의 때 소개해 주신 것으로 Hibernate가 있음을 압니다. 회사에서 타 프로젝트(협업사가 일본임, Maven prj) 소스를 받아 빌드 시도 중, doma ... 라는 것 부근에서 약간의 트러블이 있어서 뒤져 보니 doma seasar 라는 것 역시도 JPA 구현체가 아닌가 생각하게 되었습니다. (예: https://doma.readthedocs.io/en/latest/ ) 즉, Hibernate와 유사한 역할을 하는 framework library로 저는 추측하고 있습니다만, 혹 경험 많으신 영한님은 이것에 대해 알고 계시리라 생각하고 여쭙습니다. 혹, Doma Seasor 라는 것에 대해 간단한 소개나 평 등을 가능한 대로 말씀해 주실 수 있을까요? 다른 수강생들 입장에서도 인식의 지평을 넓히는 데 도움이 되실 것으로 믿습니다.^^ 감사합니다.