Я новый для встроенных баз данных, но я получил его работает как минимум. Меня смущает то, что мои данные не сохраняются между прогонами. Я имею в виду, что это было бы неплохо для тестирования? Я не хочу добавить данные в свою базу данных каждый раз, когда я запустить приложениеSpring + Hibernate + H2 Embedded DB. Как сохраняются данные?
Так что я искал способ сделать это, и я обнаружил, что я должен настроить подключение спящий режим URL, который я пытался как этот
props.put("hibernate.connection.url", "jdbc:h2:~/test");
в моем HibernateConfiguration.java. Без успеха, однако, никаких ошибок, но и ничего не было сохранено, и я не нашел этот тестовый файл, который должен быть создан с этого URL-адреса. (Запуск окна и проверил свою пользовательскую папку)
Я также видел, что его можно сделать как этот
<jdbc:embedded-database id="dataSource" type="H2">
<jdbc:script location="classpath:db-schema.sql"/>
<jdbc:script location="classpath:db-test-data.sql"/>
</jdbc:embedded-database>
и выполнять скрипты каждый раз, когда я запустить приложение, но дело в том, что я хочу спящий режим для обрабатывать все создание таблиц и т. д.
Как это обычно делается?
Я искал несколько часов, но еще не получил его.
Ps. если это необходимо, я опубликую все свои конфиги.
Редактировать: Обновлен мой вопрос, чтобы сфокусироваться на одном вопросе и включить мои конфиги.
HibernateConfiguration.java package com.courseinfo.project;
import java.util.Properties;
import javax.sql.DataSource;
import org.hibernate.dialect.H2Dialect;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.hibernate3.HibernateTransactionManager;
import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean;
import com.courseinfo.project.model.Course;
@Configuration
public class HibernateConfiguration {
@Value("#{dataSource}")
private DataSource dataSource;
@Bean
public AnnotationSessionFactoryBean sessionFactoryBean() {
Properties props = new Properties();
props.put("hibernate.dialect", H2Dialect.class.getName());
props.put("hibernate.format_sql", "true");
props.put("hibernate.connection.url", "jdbc:h2:~/test");
AnnotationSessionFactoryBean bean = new AnnotationSessionFactoryBean();
bean.setAnnotatedClasses(new Class[]{Course.class});
bean.setHibernateProperties(props);
bean.setDataSource(this.dataSource);
bean.setSchemaUpdate(true);
return bean;
}
@Bean
public HibernateTransactionManager transactionManager() {
return new HibernateTransactionManager(sessionFactoryBean().getObject());
}
}
servlet-context.xml где я только добавил встроенный тег базы данных.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd"
default-lazy-init="true">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="com.courseinfo.project" />
<jdbc:embedded-database id="dataSource" type="H2"/>
</beans:beans>
Там, конечно, тоже пом, где я получил все зависимости, но я не думаю, что это необходимо.
Я создаю объект (Course.java) и сохраняю его в db, это нормально, и я могу загрузить его снова. Но когда я меняю свой код и приложение перезагружается, объект больше не существует.
Редактировать2: Я добавляю данные следующим образом.
Связывание заводской сессии.
@Autowired
private SessionFactory sessionFactory;
Добавить свой объект курса в базу данных следующим образом.
Course course = new Course();
course.setCourseId("IDA512");
Session s = sessionFactory.openSession();
s.saveOrUpdate(course);
s.flush();
s.clear();
Course course2 = (Course) s.get(Course.class, "IDA511");
s.close();
Это прекрасно работает, и я могу получить этот курс. Однако, когда я запускаю приложение в следующий раз, нет курса с идентификатором IDA511, и я получаю исключение нулевого указателя. Означает ли это, что курс может быть сохранен только на сессии? гул
Вы установили настройки Hibernate hbm2ddl для создания капли? Если это так, ваши данные будут удалены после закрытия соединения. Взгляните на http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html Таблица 3.7 ... Также о загрузочном SQL, поместите файл с именем ** import. sql ** на вашем корневом пути и hibernate запускает его. См. Это сообщение: http://stackoverflow.com/questions/673802/how-to-import-initial-data-to-database-with-hibernate – gerrytan
Это похоже на несколько вопросов о разных вещах. Было бы лучше сузить его до одной проблемы, дать более подробную информацию об этом и открыть другие вопросы для других. –
Не могли бы вы разместить все файлы конфигурации (по крайней мере, Hibernate)? –