Cod*_*ino 7 java spring jdbc h2
我试过谷歌搜索,但几乎所有这类问题的解决方案是添加;DB_CLOSE_DELAY=-1,但它并没有为我解决任何问题.
这是我的测试课
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {Main.class})
public class Testas {
@Autowired
@Qualifier("managerImplementation")
private ClassifierManager manager;
@Test
public void testManager(){
ClassifierGroupEntity cge = new ClassifierGroupEntity();
manager.saveClassifierGroup(cge);
}
}
Run Code Online (Sandbox Code Playgroud)
经理班
@Service("managerImplementation")
public class ClassifierManagerImpl implements ClassifierManager{
@Autowired
private ClassifierGroupEntityRepository groupEntityRepository;
@Autowired
private ClassifierEntityRepository entityRepository;
@Autowired
private ClassifierValueEntityRepository valueEntityRepository;
@Override
public ClassifierGroupEntity getClassifierGroup(long id) {
return groupEntityRepository.findOne(id);
}
@Override
public ClassifierGroupEntity getClassifierGroup(String code) {
return groupEntityRepository.findByCode(code);
}
@Override
public ClassifierGroupEntity saveClassifierGroup(ClassifierGroupEntity entity) {
return groupEntityRepository.save(entity);
}
@Override
public void deleteClassifierGroup(long id) {
groupEntityRepository.delete(id);
}
@Override
public ClassifierEntity getClassifier(long id) {
return entityRepository.findOne(id);
}
@Override
public ClassifierEntity getClassifier(String code) {
return entityRepository.findByCode(code);
}
@Override
public ClassifierEntity saveClassifier(ClassifierEntity entity) {
return entityRepository.save(entity);
}
@Override
public void deleteClassifier(long id) {
entityRepository.delete(id);
}
@Override
public ClassifierValueEntity getClassifierValue(long id) {
return valueEntityRepository.findOne(id);
}
@Override
public ClassifierValue getClassifierValue(String classifiedCode, String valueCode) {
return null;
}
@Override
public ClassifierValueEntity saveClassifierValue(ClassifierValueEntity entity) {
return valueEntityRepository.save(entity);
}
@Override
public void deleteClassifierValue(long id) {
valueEntityRepository.delete(id);
}
}
Run Code Online (Sandbox Code Playgroud)
最后是属性文件
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.user=sa
spring.datasource.password=
spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
Run Code Online (Sandbox Code Playgroud)
启动测试会让我失望
org.h2.jdbc.JdbcSQLException: Table "CLASSIFIER_GROUP_ENTITY" not found; SQL statement:
insert into classifier_group_entity (id, code, modified_details, modified_time, modified_user_id, order, revision, valid_details, valid_from, valid_till, parent_id) values (null, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [42102-191]
Run Code Online (Sandbox Code Playgroud)
我不知道是否应该提供其他任何东西,如果我这样做,请告诉我.我提前感谢您的帮助.
Cod*_*ino 11
经过半个小时后,我终于找到了解决方案,如果有人遇到类似的问题.
找不到表,因为在尝试创建表时开始时出错.并且错误是由于其中一个ClassifierGroupEntity字段被命名为'order',这是SQL中的保留字之一,因此Spring生成的SQL语句在语法上是不正确的.
Ank*_*gar 10
在src/test/resources文件夹中的application.properties文件中具有以下属性:
spring.jpa.generate-DDL =真
spring.jpa.hibernate.ddl-AUTO =创建
这必须超过缠身,因为它没有保持创建而保持无或验证第一DDL创建之后.
在编写集成测试之前,我总是对 H2 数据库、Flyway、Spring Boot JPA 使用以下配置 - https://gist.github.com/vslala/d412156e5840fafa1b9f61aae5b20951
将以下配置放入您的src/test/resources/application.properties文件中。
# Datasource configuration for jdbc h2
# this is for file based persistent storage
# spring.datasource.url=jdbc:h2:file:/data/demo
# For in-memory storage
spring.datasource.url=jdbc:h2:mem:testdb;MODE=MySQL;DB_CLOSE_DELAY=-1;IGNORECASE=TRUE;
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=vslala
spring.datasource.password=simplepass
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
# This has to be over-ridden because
# it's not kept create rather kept none or validate after the first ddl creation.
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create
# This is for FlyWay configuration
spring.flyway.url=jdbc:h2:mem:testdb
spring.flyway.schemas=testdb
spring.flyway.user=vslala
spring.flyway.password=simplepass
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17151 次 |
| 最近记录: |