【发布时间】:2016-08-07 13:07:01
【问题描述】:
我尝试用谷歌搜索,但几乎所有此类问题的解决方案是添加;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);
}
}
经理类
@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);
}
}
最后是属性文件
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
启动测试让我失望
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]
我不知道我是否应该提供其他任何东西,如果需要,请告诉我。提前感谢您的帮助。
【问题讨论】:
-
这意味着您的内存数据库中的 H2 未初始化。如果您使用的是 Hibernate,您可以使用
进行测试吗?如果没有,您可以提供将创建您的架构的 sql。 -
你在哪里初始化你的数据库?您在哪里加载 SQL 以创建模式(和表)?
-
我不知道,我猜?我认为 spring jpa 为我创造了它们。我的意思是我第一次这样做时它对我来说效果很好(创建扩展 CrudRepository 的接口,然后只要求使用@Autowired 实现它)。抱歉,如果这听起来很愚蠢,我对所有这些东西都很陌生。
-
在你的休眠配置中的某个地方,如果缺少,你需要启用创建模式的能力。在 /hibernate-configuration/session-factory 下的 hibernate.cfg.xml 中,我有:
create update 根据需要创建表格。我还在我的实体上使用@Table(name="..."),所以它知道需要什么表。