Jak importovat počáteční data do databáze s spánku?

hlasů
58

Při nasazování aplikací, často používám schopnost přezimovat na vytvoření schématu databáze za účelem zjednodušení nasazení. To je snadno dosažitelné pomocí konfigurace hibernate.hbm2ddl.auto majetku.

Nicméně, občas taky třeba vložit několik počátečních dat do databáze, pro uživatele, například root. Existuje způsob, jak bych mohl dosáhnout pomocí režimu spánku nějakým textového souboru zatížení?

Vím, že jsem mohl snadno naprogramovat kód, který bude dělat to, ale jen zeptat, jestli je již nějaký nástroj, který mi může pomoci dosáhnout stejné prostřednictvím konfigurace?

Položena 23/03/2009 v 16:20
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
78

Našel jsem to tím, že dělá hledání na „Přechod do stavu hibernace svítidel“:

Hibernace se vytvořit databázi, pokud je vytvořen správce subjekt továrny (ve skutečnosti, když je přezimovat v SessionFactory vytvořil správce továrny entity). Existuje-li soubor s názvem import.sql v kořenové cesty třídy ( ‚/import.sql‘) Režim spánku spustí SQL příkazy pro čtení ze souboru po vytvoření schématu databáze. Je důležité mít na paměti, že před spánku vytváří schéma je to vlévá (smazat všechny tabulky, omezení nebo jakýkoliv jiný objekt databáze, která bude vytvořena v procesu budování schéma).

Zdroj: http://www.velocityreviews.com/forums/t667849-hibernate-quotfixturesquot-or-database-population.html

Zkusit to a dejte nám vědět, jestli to funguje!

Odpovězeno 24/03/2009 v 00:42
zdroj uživatelem

hlasů
55

Přidání import.sql do cesty třídy funguje skvěle, hbm2ddl zkontroluje, zda soubor existuje a spustí jej. Jedinou další detail je, že každý SQL příkaz musí být na samostatném řádku, jinak nebude možné spustit.

To bude také fungovat pouze tehdy, pokud hbm2ddl.autoje nastaven na createnebo create-drop.

Odpovězeno 29/05/2009 v 22:48
zdroj uživatelem

hlasů
40

Přidejte přezimují vlastnictví hibernate.hbm2ddl.import_files v konfiguraci vašeho spánku. Změnit hibernate.hbm2ddl.auto vlastnost vytvořit. Přidejte initial_data.sql v / classes adresáři s počátečním kódu SQL pro vložení dat. Přezimují provést toto po vytvořit schéma databáze.

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
            <prop key="hibernate.hbm2ddl.auto">create</prop>
            <prop key="hibernate.hbm2ddl.import_files">initial_data.sql</prop>
        </props>
    </property>
</bean>

Pokud si nechcete přidat vlastnost v konfiguraci vašeho spánku můžete vytvořit soubor import.sql v adresáři / tříd a přezimují použití tohoto standardně, pokud vlastnost hibernate.hbm2ddl.auto rovná vytvářet

Odpovězeno 08/07/2013 v 14:19
zdroj uživatelem

hlasů
18

Proč hbm2ddl.autoa hbm2ddl.import_filesvlastnosti jsou zlí

(Je-li zneužit jako nástroj pro řízení změn databáze)

Řekl stejně jako jinde , použitím hibernate.hbm2ddl.autoa hibernate.hbm2ddl.import_filespro řízení změn databáze má některé závažné nedostatky:

  1. Lze měnit pouze struktura. Stávající hodnoty mohou být přepsány, nebo - v horším případě - jednoduše poslal do Nirvány. Bez nástroje, jako je liquibase nebo scriptella , nemáte žádné ETL schopnosti.
  2. Tato metoda nemá žádné transakce. Jak struktura a prohlášení údaje budou provedeny před správcem transakcí přebírá. Řekněme, že máte chybu v příkazu 42 z 256. Databáze je v nekonzistentním stavu teď.
  3. Imvho, ty volné transparentnost a kontrolu: kde scriptella script nebo liquibase změnit nastavení nebo většinou spáchal spolu se změnami v modelu domény, můžete provést změny v modelu domény a naděje (v podstatě), který hibernace se zjistit, co má dělat. (To není, ale to je jiný příběh).
  4. Pro integraci, systému a přejímací zkoušky jste jen předpokládat , že vaše zkušební databáze jsou v naprosto přesně stejném stavu, jako vaše produkční databáze. Musíš sledovat tomto ručně (Hodně štěstí a bavit se s ním;)). V případě, že uděláte chybu, jen malý skluz je dostačující, mohou být výsledky velmi budeme mít katastrofální následky.

Já osobně používám liquibase pro řízení změn databáze a vyvinuli následující pracovní postup ke snížení údržby:

  • Vytvořit seznam změn z příkazového řádku z mého posledního struktury uvolňováním
  • Vytvořte si seznam změn ve svém posledním databáze
  • Ručně diff oba protokoly změny (obvykle změny nejsou tak velké, a pokud ano, obvykle splňují jeden z nedostatků liquibases diff příkaz.
  • Vytvoření změna sady

Dokonce i pro složité změny v nichž jeden má zavést customChange , toho může být dosaženo během několika hodin, včetně definice vrácení zpět, testování a dokumentace. Pro triviálních změn je otázkou několika minut. Zjednodušeně řečeno: co musíte udělat trochu více práce (jsem vytvořil vlastní sad změn pro 4 konfigurace databáze v době kratší než jeden den), ale dostanete klid, že jste udělali vše pro to, aby databáze v konzistentním stavu.

Odpovězeno 22/03/2014 v 02:55
zdroj uživatelem

hlasů
6

Po několika hodinách zakopnutí s tím jsem se rozhodl sdílet to, co jsem našel, i když je to velmi stará pošta.

Chcete-li, aby to fungovalo správně, musel jsem to udělat následující:

  • hbmddlnastavena na hodnotu createnebocreate-drop
  • file.sql v cestě třídy kořene; V mém případě jsem jen dát ji do resourcessložky, jsem pomocí Maven.
  • každý SQL příkaz v jednom řádku
  • každá file.sql musí mít prázdný řádek na Začátku souboru ==> neznají důvod pro tento jeden, ale pokud nemám vložit tento prázdný řádek, v době uzavření servery mi říká, že je tu syntaktická chyba u prvního znaku.

Naděje, která pomáhá.

Odpovězeno 03/09/2015 v 18:40
zdroj uživatelem

hlasů
0

Ujistěte se, že vaše import.sql ve správném formátu. Začněte s prohlášením o vložkou jeden vložky pro testování.

Odpovězeno 21/09/2018 v 09:51
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more