Springboot 3.1:在运行Junit Repository测试时无法连接到H2数据库。

huangapple go评论91阅读模式
英文:

Springboot 3.1 : Not able to connect to H2 database while running Junit Repository test

问题

这是你的错误堆栈中的一部分,指出了一个关于Hibernate Sequence的问题:

  1. Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ALL_SEQUENCES" not found; SQL statement:
  2. select * from all_sequences [42102-214]

这个问题可能是由于Hibernate在H2数据库中查找序列信息时失败导致的。要解决这个问题,你可以尝试以下步骤:

  1. 确保你的H2数据库已经正确配置。检查application-test.properties文件中的H2数据库连接配置是否正确。

  2. 在你的H2数据库中手动创建一个名为"ALL_SEQUENCES"的表。你可以使用H2的控制台或者SQL客户端工具来执行SQL命令。

  3. 确保你的实体类(NtbCustomerDetail)上的@GeneratedValue注解配置正确。你可以尝试将strategy设置为GenerationType.IDENTITY,这将告诉Hibernate使用数据库的自增字段来生成主键。

  4. 检查你的Hibernate版本是否与Spring Boot和Spring Data JPA版本兼容。有时不同版本之间可能会出现兼容性问题,因此确保它们之间的版本匹配。

尝试以上步骤后,重新运行你的单元测试,看看是否解决了问题。希望这能帮助你解决这个Hibernate Sequence的问题。如果问题仍然存在,请提供更多的信息以便进一步帮助。

英文:

I want to write Unit tests for my repository but constantly getting errors, Here's the error stack trace:

  1. java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@7433ca19 testClass = com.example.ntb.repository.NtbCustomerRepositoryTests, locations = [], classes = [com.example.ntb.NTBTrackerApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTestContextBootstrapper=true"], contextCustomizers = [[ImportsContextCustomizer@5d221b20 key = [org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration, org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration, org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration, org.springframework.boot.autoconfigure.sql.init.SqlInitializationAutoConfiguration, org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration, org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration, org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManagerAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@7ce026d3, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@5b247367, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@76494737, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@351584c0, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@7a0e2ef4, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@17bffc17, org.springframework.boot.test.context.SpringBootTestAnnotation@cae1547], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
  2. at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142)
  3. at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) ```
  4. at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:141)
  5. at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:97)
  6. at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241)
  7. at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138)
  8. at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377)
  9. at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382)
  10. at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377)
  11. at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
  12. at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
  13. at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
  14. at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
  15. at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
  16. at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310)
  17. at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)
  18. at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734)
  19. at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
  20. at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376)
  21. at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289)
  22. at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
  23. at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288)
  24. at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278)
  25. at java.base/java.util.Optional.orElseGet(Optional.java:364)
  26. at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277)
  27. at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31)
  28. at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105)
  29. at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
  30. at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104)
  31. at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68)
  32. at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123)
  33. at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
  34. at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123)
  35. at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90)
  36. at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
  37. at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
  38. at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
  39. at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
  40. at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
  41. at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
  42. at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
  43. at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
  44. at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
  45. at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
  46. at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
  47. at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
  48. at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
  49. at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
  50. at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
  51. at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
  52. at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
  53. at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
  54. at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
  55. at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
  56. at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
  57. at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
  58. at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
  59. at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147)
  60. at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127)
  61. at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90)
  62. at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55)
  63. at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102)
  64. at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54)
  65. at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
  66. at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
  67. at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
  68. at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
  69. at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57)
  70. at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
  71. at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
  72. at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
  73. at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
  74. at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
  75. 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]: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not instantiate id generator [entity-name=com.example.ntb.entity.NtbCustomerDetail]
  76. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770)
  77. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598)
  78. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
  79. at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
  80. at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
  81. at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
  82. at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
  83. at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1156)
  84. at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:931)
  85. at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608)
  86. at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:733)
  87. at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:435)
  88. at org.springframework.boot.SpringApplication.run(SpringApplication.java:311)
  89. at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137)
  90. at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
  91. at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
  92. at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1405)
  93. at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545)
  94. at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137)
  95. at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108)
  96. at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184)
  97. at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118)
  98. ... 72 more
  99. Caused by: jakarta.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not instantiate id generator [entity-name=com.example.ntb.entity.NtbCustomerDetail]
  100. at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421)
  101. at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)
  102. at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352)
  103. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1816)
  104. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1766)
  105. ... 93 more
  106. Caused by: org.hibernate.MappingException: Could not instantiate id generator [entity-name=com.example.ntb.entity.NtbCustomerDetail]
  107. at org.hibernate.id.factory.internal.StandardIdentifierGeneratorFactory.createIdentifierGenerator(StandardIdentifierGeneratorFactory.java:230)
  108. at org.hibernate.id.factory.internal.IdentifierGeneratorUtil.createLegacyIdentifierGenerator(IdentifierGeneratorUtil.java:126)
  109. at org.hibernate.mapping.SimpleValue.createGenerator(SimpleValue.java:414)
  110. at org.hibernate.internal.SessionFactoryImpl.lambda$createGenerators$1(SessionFactoryImpl.java:412)
  111. at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
  112. at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
  113. at java.base/java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1779)
  114. at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
  115. at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
  116. at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
  117. at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
  118. at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
  119. at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
  120. at org.hibernate.internal.SessionFactoryImpl.createGenerators(SessionFactoryImpl.java:411)
  121. at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:248)
  122. at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:431)
  123. at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1455)
  124. at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66)
  125. at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376)
  126. at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)
  127. ... 97 more
  128. Caused by: org.hibernate.HibernateException: Could not fetch the SequenceInformation from the database
  129. at org.hibernate.engine.jdbc.env.internal.ExtractedDatabaseMetaDataImpl.sequenceInformationList(ExtractedDatabaseMetaDataImpl.java:307)
  130. at org.hibernate.engine.jdbc.env.internal.ExtractedDatabaseMetaDataImpl.getSequenceInformationList(ExtractedDatabaseMetaDataImpl.java:151)
  131. at org.hibernate.id.enhanced.SequenceStyleGenerator.getSequenceIncrementValue(SequenceStyleGenerator.java:568)
  132. at org.hibernate.id.enhanced.SequenceStyleGenerator.configure(SequenceStyleGenerator.java:216)
  133. at org.hibernate.id.factory.internal.StandardIdentifierGeneratorFactory.createIdentifierGenerator(StandardIdentifierGeneratorFactory.java:224)
  134. ... 116 more
  135. Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ALL_SEQUENCES" not found; SQL statement:
  136. select * from all_sequences [42102-214]
  137. at org.h2.message.DbException.getJdbcSQLException(DbException.java:502)
  138. at org.h2.message.DbException.getJdbcSQLException(DbException.java:477)
  139. at org.h2.message.DbException.get(DbException.java:223)
  140. at org.h2.message.DbException.get(DbException.java:199)
  141. at org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8398)
  142. at org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8369)
  143. at org.h2.command.Parser.readTableOrView(Parser.java:8358)
  144. at org.h2.command.Parser.readTablePrimary(Parser.java:1863)
  145. at org.h2.command.Parser.readTableReference(Parser.java:2334)
  146. at org.h2.command.Parser.parseSelectFromPart(Parser.java:2772)
  147. at org.h2.command.Parser.parseSelect(Parser.java:2878)
  148. at org.h2.command.Parser.parseQueryPrimary(Parser.java:2762)
  149. at org.h2.command.Parser.parseQueryTerm(Parser.java:2633)
  150. at org.h2.command.Parser.parseQueryExpressionBody(Parser.java:2612)
  151. at org.h2.command.Parser.parseQueryExpressionBodyAndEndOfQuery(Parser.java:2605)
  152. at org.h2.command.Parser.parseQueryExpression(Parser.java:2598)
  153. at org.h2.command.Parser.parseQuery(Parser.java:2567)
  154. at org.h2.command.Parser.parsePrepared(Parser.java:724)
  155. at org.h2.command.Parser.parse(Parser.java:689)
  156. at org.h2.command.Parser.parse(Parser.java:661)
  157. at org.h2.command.Parser.prepareCommand(Parser.java:569)
  158. at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:631)
  159. at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:554)
  160. at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116)
  161. at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:92)
  162. at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:288)
  163. at org.hibernate.tool.schema.extract.spi.ExtractionContext.getQueryResults(ExtractionContext.java:43)
  164. at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:39)
  165. at org.hibernate.engine.jdbc.env.internal.ExtractedDatabaseMetaDataImpl.sequenceInformationList(ExtractedDatabaseMetaDataImpl.java:291)
  166. ... 120 more

Here's my Entity class:

  1. @Entity
  2. @Getter
  3. @Setter
  4. @Table(name = "NTB_CUSTOMER_DETAIL", indexes = {@Index(name = "IDX_MOB_SC_SM_NTB_CUSTOMER_DETAIL",
  5. columnList = "mobileNumber, sourceChannel, sourceModule")})
  6. public class NtbCustomerDetail {
  7. @Id
  8. @GeneratedValue(strategy = GenerationType.AUTO)
  9. private long id;
  10. @Column(nullable = false, length = 20)
  11. private String mobileNumber;
  12. @Column(nullable = false)
  13. private String saltedMobileNumber;
  14. @Enumerated(EnumType.STRING)
  15. @Column(nullable = false, columnDefinition = "VARCHAR(10) DEFAULT 'NTB'")
  16. private SourceChannel sourceChannel;
  17. @Enumerated(EnumType.STRING)
  18. @Column(nullable = false, columnDefinition = "VARCHAR(10) DEFAULT 'NTB'")
  19. private SourceModule sourceModule;
  20. private long loginCount = 1;
  21. }

application-test.properties:

  1. spring.datasource.driver-class-name=org.h2.Driver
  2. spring.datasource.url=jdbc:h2:mem:ntbdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
  3. spring.datasource.username=sa
  4. spring.datasource.password=
  5. spring.h2.console.enabled=true
  6. spring.application.admin.enabled=true
  7. spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect

I am using Spring boot and Spring data JPA 3.1.

I have attempted various approaches, such as creating a custom H2 Dialect and adding CREATE SEQUENCE HIBERNATE_SEQUENCE START WITH 1 INCREMENT BY 1;, but none of them have been successful so far.

I would be grateful if someone could assist me in finding a solution to this issue.

Thank you in advance for your help.

答案1

得分: 1

看起来Hibernate正在使用Oracle方言。它尝试读取表ALL_SEQUENCES,这对于H2数据库是不必要的。H2数据库使用真正的序列来生成ID。

原因可能是您的application-test.properties没有任何效果。看起来您没有将活动配置设置为test。在日志中,我可以看到:

  1. activeProfiles = []

请在您的测试类中添加

  1. @ActiveProfiles("test")

或者只需将测试属性放在src/test/resources文件夹中,并将其命名为application.properties

英文:

It looks like Hibernate is using the Oracle dialect. It tries to read the table ALL_SEQUENCES which is not necessary for H2 database. H2 database uses a real sequences to generate IDs.

The reason could be that your application-test.properties doesn't have any effect. It looks like you didn't set the active profile to test. In the logs I can see:

  1. activeProfiles = []

Please add

  1. @ActiveProfiles("test")

to your test classes. Or otherwise just put the test properties to src/test/resources folder and name it application.properties.

答案2

得分: 0

我通过将create table语句包含在我的data.sql文件中来解决了这个问题。如果有人知道替代解决方案,请分享您的见解。

英文:

I was able to resolve the issue by including the create table statement in my data.sql file. If anyone knows of an alternative solution, kindly share your insights.

huangapple
  • 本文由 发表于 2023年6月12日 22:16:52
  • 转载请务必保留本文链接:https://go.coder-hub.com/76457553.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定