我正在为我的应用程序使用 spring、hibernate、mysql,我正在尝试使用 h2 来测试我的存储库和服务,但是我收到一个错误,我已经好几天没有解决了。
这是应用程序属性:
`spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/daskalos
#---enter your username and password------------------
spring.datasource.username = root
spring.datasource.password = admin
#-----------------------------------------------------
spring.jpa.defer-datasource-initialization = true
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation = true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.default_schema=daskalos
#-----Hibernate ddl auto (create, create-drop, validate, update)----------------
spring.jpa.hibernate.ddl-auto = update
#-------------------------------------------------------------------------------
server.port=8080`
这是我用于测试的测试属性:
`spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DATABASE_TO_LOWER=TRUE;DB_CLOSE_ON_EXIT=FALSE;MODE=MySQL
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.hibernate.ddl-auto=create-drop
spring.h2.console.enabled=false
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.generate-ddl=true
spring.jpa.defer-datasource-initialization=true`
这是我的测试课:
`@DataJpaTest
@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource(locations = "/application-test.properties")
public class TeacherServiceIntegrationTest {
@TestConfiguration
static class TeacherServiceIntegrationTestsContextConfiguration {
@Bean
public TeacherService teacherService() {
return new TeacherServiceImpl();
}
@Bean
public ExperienceService experienceService() {
return new ExperienceServiceImpl();
}
@Bean
public RatingService ratingService() {
return new RatingServiceImpl();
}
@Bean
public SubjectService subjectService() {
return new SubjectServiceImpl();
}
}
@Autowired
private TeacherRepository teacherRepository;
@Autowired
private ExperienceRepository experienceRepository;
@Autowired
private TeacherToExperienceRepository teacherToExperienceRepository;
@Autowired
private TeacherRatingRepository teacherRatingRepository;
@Autowired
private TeacherToRatingRepository teacherToRatingRepository;
@Autowired
private SubjectRepository subjectRepository;
@Autowired
private TeacherToSubjectRepository teacherToSubjectRepository;
@Autowired
private RatingService ratingService;
@Autowired
private SubjectService subjectService;
@Autowired
private ExperienceService experienceService;
@Autowired
private TeacherService teacherService;
@Autowired
private UserRepository userRepository;
private Teacher teacher1;
private Student student1;
private ExperienceDTO experienceDTO1;
private ExperienceDTO experienceDTO2;
private TeacherRatingDTO teacherRatingDTO1;
private TeacherRatingDTO teacherRatingDTO2;
private SubjectDTO subjectDTO1;
private SubjectDTO subjectDTO2;
@Before
public void setup() {
teacher1 = new Teacher(10L, "Luka", "Kalandadze", "AtLeast^8", "email2",
UserType.TEACHER, "55555555", "Tbilisi", true, 100, 150);
student1 = new Student("email1", "AtLeast^8", "Giorgi", "Adikashviili", UserType.STUDENT);
student1.setID(11L);
experienceDTO1 = ExperienceDTO.builder().
ID(1000L).
employer("Microsoft").
jobDescription("Code maintenance").
startDate(new Date(2017, Calendar.NOVEMBER, 19)).
endDate(null).
build();
experienceDTO2 = ExperienceDTO.builder().
ID(1001L).
employer("Amazon").
jobDescription("Code development").
startDate(new Date(2014, Calendar.JUNE, 8)).
endDate(new Date(2017, Calendar.NOVEMBER, 19)).
build();
teacherRatingDTO1 = TeacherRatingDTO.builder().
ID(100L).
studentID(student1.getID()).
studentComment("very nice teacher").
rating(5).
//studentNameSecondName("Malkhaz Verstappen").
build();
teacherRatingDTO2 = TeacherRatingDTO.builder().
ID(101L).
studentID(student1.getID()).
studentComment("not bad teacher").
rating(3).
//studentNameSecondName("Karen Horner").
build();
subjectDTO1 = SubjectDTO.builder().
ID(21L).
name("Aero Engineering").
build();
subjectDTO2 = SubjectDTO.builder().
ID(21L).
name("Mechanical Engineering").
build();
}
@Test
public void testAddRemoveExperience() {
Teacher t = userRepository.save(teacher1);
teacherService.addExperience(t.getID(), experienceDTO1);
List<ExperienceDTO> teachersExperience = teacherService.getTeacherDTO(teacher1.getID()).getTeachersExperience();
assertEquals(1, teachersExperience.size());
assertThat(teachersExperience, contains(experienceDTO1));
teacherService.addExperience(t.getID(), experienceDTO2);
teachersExperience = teacherService.getTeacherDTO(teacher1.getID()).getTeachersExperience();
assertEquals(2, teachersExperience.size());
assertThat(teachersExperience, containsInAnyOrder(experienceDTO2, experienceDTO1));
teacherService.removeExperience(experienceDTO1);
teachersExperience = teacherService.getTeacherDTO(teacher1.getID()).getTeachersExperience();
assertEquals(1, teachersExperience.size());
assertThat(teachersExperience, contains(experienceDTO2));
teacherService.removeExperience(experienceDTO2);
teachersExperience = teacherService.getTeacherDTO(teacher1.getID()).getTeachersExperience();
assertEquals(0, teachersExperience.size());
}
@Test
public void testAddRemoveRating() {
Teacher t = userRepository.save(teacher1);
Student s = userRepository.save(student1);
teacherService.addRating(t.getID(), teacherRatingDTO1);
List<TeacherRatingDTO> teacherRatings = teacherService.getTeacherDTO(teacher1.getID()).getTeacherRatings();
assertEquals(1, teacherRatings.size());
assertThat(teacherRatings, contains(teacherRatingDTO1));
teacherService.addRating(t.getID(), teacherRatingDTO2);
teacherRatings = teacherService.getTeacherDTO(teacher1.getID()).getTeacherRatings();
assertEquals(2, teacherRatings.size());
assertThat(teacherRatings, containsInAnyOrder(teacherRatingDTO2, teacherRatingDTO1));
teacherService.removeRating(teacherRatingDTO1);
teacherRatings = teacherService.getTeacherDTO(teacher1.getID()).getTeacherRatings();
assertEquals(1, teacherRatings.size());
assertThat(teacherRatings, contains(teacherRatingDTO2));
teacherService.removeRating(teacherRatingDTO2);
teacherRatings = teacherService.getTeacherDTO(teacher1.getID()).getTeacherRatings();
assertEquals(0, teacherRatings.size());
}
@Test
public void testAddRemoveSubject() {
Teacher t = userRepository.save(teacher1);
teacherService.addSubject(t.getID(), subjectDTO1);
List<SubjectDTO> teacherSubjects = teacherService.getTeacherDTO(teacher1.getID()).getTeacherSubjects();
assertEquals(1, teacherSubjects.size());
assertThat(teacherSubjects, contains(subjectDTO1));
teacherService.addSubject(t.getID(), subjectDTO2);
teacherSubjects = teacherService.getTeacherDTO(teacher1.getID()).getTeacherSubjects();
assertEquals(2, teacherSubjects.size());
assertThat(teacherSubjects, containsInAnyOrder(subjectDTO2, subjectDTO1));
teacherService.removeSubject(t.getID(), subjectDTO1);
teacherSubjects = teacherService.getTeacherDTO(teacher1.getID()).getTeacherSubjects();
assertEquals(1, teacherSubjects.size());
assertThat(teacherSubjects, contains(subjectDTO2));
teacherService.removeSubject(t.getID(), subjectDTO2);
teacherSubjects = teacherService.getTeacherDTO(teacher1.getID()).getTeacherSubjects();
assertEquals(0, teacherSubjects.size());
}
@Test
public void testUpdateTeacher() {
Teacher t = userRepository.save(teacher1);
teacherService.updateTeacher(TeacherDTO.builder().ID(t.getID()).name("Levani").build());
String newName = teacherService.getTeacherDTO(t.getID()).getName();
}
}`
这里是堆栈跟踪:
`org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "
create table experience (
id bigint not null,
employer varchar(255),
end_date datetime(6),
job_description varchar(255),
start_date datetime(6),
primary key (id)
) engine=InnoDB" via JDBC Statement
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:502) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:486) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:363) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:176) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:144) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:128) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:254) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:143) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at java.base/java.util.HashMap.forEach(HashMap.java:1421) ~[na:na]
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:140) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:336) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:415) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1423) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) ~[spring-orm-6.0.6.jar:6.0.6]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) ~[spring-orm-6.0.6.jar:6.0.6]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-6.0.6.jar:6.0.6]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-6.0.6.jar:6.0.6]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) ~[spring-orm-6.0.6.jar:6.0.6]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) ~[spring-beans-6.0.6.jar:6.0.6]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) ~[spring-beans-6.0.6.jar:6.0.6]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) ~[spring-beans-6.0.6.jar:6.0.6]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[spring-beans-6.0.6.jar:6.0.6]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.0.6.jar:6.0.6]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.6.jar:6.0.6]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.0.6.jar:6.0.6]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.0.6.jar:6.0.6]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) ~[spring-context-6.0.6.jar:6.0.6]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) ~[spring-context-6.0.6.jar:6.0.6]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) ~[spring-context-6.0.6.jar:6.0.6]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[spring-boot-3.0.4.jar:3.0.4]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-3.0.4.jar:3.0.4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) ~[spring-boot-3.0.4.jar:3.0.4]
at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) ~[spring-boot-test-3.0.4.jar:3.0.4]
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) ~[spring-core-6.0.6.jar:6.0.6]
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) ~[spring-core-6.0.6.jar:6.0.6]
at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) ~[spring-boot-3.0.4.jar:3.0.4]
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) ~[spring-boot-test-3.0.4.jar:3.0.4]
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) ~[spring-boot-test-3.0.4.jar:3.0.4]
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) ~[spring-boot-test-3.0.4.jar:3.0.4]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) ~[spring-test-6.0.6.jar:6.0.6]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) ~[spring-test-6.0.6.jar:6.0.6]
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) ~[spring-test-6.0.6.jar:6.0.6]
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:141) ~[spring-test-6.0.6.jar:6.0.6]
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:97) ~[spring-test-6.0.6.jar:6.0.6]
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) ~[spring-test-6.0.6.jar:6.0.6]
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228) ~[spring-test-6.0.6.jar:6.0.6]
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) ~[spring-test-6.0.6.jar:6.0.6]
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) ~[junit-4.13.2.jar:4.13.2]
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) ~[spring-test-6.0.6.jar:6.0.6]
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247) ~[spring-test-6.0.6.jar:6.0.6]
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) ~[spring-test-6.0.6.jar:6.0.6]
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) ~[junit-4.13.2.jar:4.13.2]
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) ~[junit-4.13.2.jar:4.13.2]
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) ~[junit-4.13.2.jar:4.13.2]
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) ~[junit-4.13.2.jar:4.13.2]
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) ~[junit-4.13.2.jar:4.13.2]
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) ~[spring-test-6.0.6.jar:6.0.6]
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) ~[spring-test-6.0.6.jar:6.0.6]
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) ~[junit-4.13.2.jar:4.13.2]
at org.junit.runners.ParentRunner.run(ParentRunner.java:413) ~[junit-4.13.2.jar:4.13.2]
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) ~[spring-test-6.0.6.jar:6.0.6]
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) ~[junit-4.13.2.jar:4.13.2]
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) ~[junit-rt.jar:na]
at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na]
at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na]
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na]
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235) ~[junit-rt.jar:na]
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) ~[junit-rt.jar:na]
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000d\000a create table experience (\000d\000a id bigint not null,\000d\000a employer varchar(255),\000d\000a end_date datetime(6),\000d\000a job_description varchar(255),\000d\000a start_date datetime(6),\000d\000a primary key (id)\000d\000a ) engine[*]=InnoDB"; expected "identifier"; SQL statement:
`
如果有人能提供帮助,我将不胜感激