2011-03-13 50 views
3

我想夾具/樣品數據添加到使用Hibernate作爲JPA一個Spring項目。如何燈具添加到春季Hibernate項目

我創建了一個fixtures.sql文件(在WEB-INF /班/ fixtures.sql)包含了一堆,我要執行我的同時發展與樣本數據來填充數據庫的SQL查詢。 在發展模式,我在內存數據庫超音速InMemory使用,當我部署到任何的Postgres或MySQL,這個相同的數據將被載入。

當應用程序重新啓動/啓動時如何加載這些數據?每次應用程序重新啓動時,Hypersonic都會擦除內存數據庫,這意味着每次我想在前端測試某些內容時,都需要完成所有步驟以創建示例數據。

database.properties:

database.password= 
database.url=jdbc\:hsqldb\:mem\:myproject 
database.username=sa 
database.driverClassName=org.hsqldb.jdbcDriver 

的persistence.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> 
      <!-- value="create" to build a new database on each run; value="update" to modify an existing database; value="create-drop" means the same as "create" but also drops tables when Hibernate closes; value="validate" makes no changes to the database --> 
      <property name="hibernate.hbm2ddl.auto" value="create"/> 
      <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/> 
      <property name="hibernate.connection.charSet" value="UTF-8"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

回答

3

三種可能的方式:

  1. 使用import.sql(見http://blog.eyallupu.com/2007/05/hibernates-hbm2ddl-tool.html在上一節 「創造」 )

  2. 使用DbUnit(參見http://onjava.com/pub/a/onjava/2004/01/21/dbunit.html

  3. 寫一段代碼,使用通過創建域對象並將其保存到填充在@SetUp(或應用程序啓動時)數據庫。

+0

有了一些調整,我得到了import.sql工作的,萬分感謝! 不得不添加一行到我的persistence.xml來讓它工作: 2011-03-13 19:07:31

+0

出於好奇,什麼是初始數據被稱爲?在Pylons框架(一個python框架)中工作時,它被稱爲fixtures,Spring/Hibernate使用相同的術語嗎? – 2011-03-13 19:17:58

+0

我不認爲Spring/Hibernate將它稱爲與夾具不同的東西。這是這類事情的通常術語。或者說,這些數據是測試夾具的一部分。 – sourcedelica 2011-03-13 19:45:21

4

您可以使用<jdbc:initialize-database>,看到12.9 Initializing a DataSource

+0

這是Spring Security推薦的加載角色和權限的方式,但今天早些時候無法使其工作。 感謝您的鏈接:-) – 2011-03-13 19:06:30

+0

很酷,沒有意識到這一點。 – sourcedelica 2011-03-13 19:47:15

2

如果您更喜歡更結構化的方法,並且如果您的項目足夠大,您應該查看https://github.com/42BV/jarbhttp://www.liquibase.org/。 您還應該考慮是否需要瞬態新鮮固定裝置或持久性固定裝置(請參閱xUnit測試模式)。因爲春天這種設置可以與環境的抽象和豆型材使用(見@profile從3.1)

+0

liquibase巨大的粉絲,有沒有一種很好的方式將其與Hibernate項目集成? – 2012-03-13 14:49:45

+0

如果你有一個Java配置Spring項目,JARB將適合完美: '@Bean公共PopulateApplicationListener populateAppliationListener(){ 返回新PopulateApplicationListenerBuilder()初始化()增加(新SqlDatabasePopulator(數據源,新的使用ClassPathResource(「進口。 SQL「)))。build();}' 我們也支持異步加載數據庫/特定於數據庫的腳本/或目錄中的一組文件。 – Jeroen 2015-04-17 07:25:26