2011-11-01 13 views
9

में स्कीमा बनाने के लिए स्टार्टअप स्क्रिप्ट मैं टेराडाटा डेटाबेस को मॉक करने के लिए इन-मेमोरी डेटाबेस का उपयोग करने का प्रयास कर रहा हूं। टेबल बनाने से पहले मुझे एक स्कीमा बनाना होगा, हालांकि, यह मुझे फिट बैठ रहा है।एचएसक्यूएलडीबी

मैं वसंत का उपयोग कर रहा हूं और import.sql के साथ बहुत से डेटाबेस इंटरैक्शन हैं, हालांकि, हाइबरनेट ने सभी तालिकाओं को बनाने के बाद यह निष्पादित किया है। मैंने .script फ़ाइल का उपयोग करने का प्रयास किया है जो HSQLDB को पढ़ना है, लेकिन मुझे लगता है कि जब आप इन-मेमोरी डेटाबेस का उपयोग करते हैं जो काम नहीं करता है। मैंने फ़ाइलों को थोड़ा सा स्थानांतरित कर दिया है और कुछ भी हिट नहीं लगता है।

किसी ने भी इन-मेमोरी HSQLDB डेटाबेस के लिए स्टार्टअप पर स्कीमा बनाने का तरीका निकाला है?

उत्तर

5

आप अपनी स्क्रिप्ट इस तरह चलाते हैं ...

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd"> 


<jdbc:embedded-database id="dataSource" type="H2" > 
    <jdbc:script location="classpath:my.sql" />  
</jdbc:embedded-database> 

... तो यह क्रियान्वित किया जाता है इससे पहले कि हाइबरनेट इसके प्रारंभ सामान करता है।


मैंने इसे फिर से परीक्षण किया है, खासकर आपके लिए। हाइबरनेट टेबल बनाने से पहले यह चलाया जाता है। इस लॉग (चालू स्क्रिप्ट पहले 3 लाइनों में है, पिछले वाले में हाइबरनेट) देखें:

2011-11-01 19:10:08,380 [main] INFO org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory - Creating embedded database 'dataSource' 
2011-11-01 19:10:08,583 [main] INFO org.springframework.jdbc.datasource.init.ResourceDatabasePopulator - Executing SQL script from class path resource [my.sql] 
2011-11-01 19:10:08,683 [main] INFO org.springframework.jdbc.datasource.init.ResourceDatabasePopulator - Done executing SQL script from class path resource [my.sql] in 100 ms. 
2011-11-01 19:10:08,683 [main] INFO org.springframework.context.support.GenericApplicationContext - Bean 'dataSource' of type [class org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2011-11-01 19:10:08,683 [main] INFO org.springframework.context.support.GenericApplicationContext - Bean 'dataSource' of type [class org.springframework.jdbc.datasource.SimpleDriverDataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2011-11-01 19:10:08,700 [main] INFO org.springframework.context.support.GenericApplicationContext - Bean 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#35712651' of type [class org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
2011-11-01 19:10:08,717 [main] INFO org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean - Building JPA container EntityManagerFactory for persistence unit 'testH2DbPersistenceUnit' 
2011-11-01 19:10:08,854 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final 
2011-11-01 19:10:08,859 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.6.7.Final 
2011-11-01 19:10:08,861 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found 
... 
2011-11-01 19:10:10,313 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - Running hbm2ddl schema update 
2011-11-01 19:10:10,313 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - fetching database metadata 
2011-11-01 19:10:10,315 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - updating schema 
+0

यह सब खत्म हो जाने के बाद होता है। गलत जवाब। माफ़ कीजिये। लेकिन यह बहुत अच्छा है ... – markthegrea

+0

@markthegrea: अजीब, जब मैं इसे आज़माता हूं, हाइबरनेट टेबल बनाने के पहले किया जाता है। इसे साबित करने के लिए, मैंने लॉग संलग्न किए हैं। तो आपकी समस्या कुछ और होनी चाहिए। -- सही उत्तर। – Ralph

+0

राल्फ, मैंने इसे समझ लिया। डेटासेट को बनाए जाने के बाद मैं आपके द्वारा दिए गए कोड को डाल रहा था। स्प्रिंग लॉगिंग प्राप्त करने के लिए मुझे कुछ समय लगा, लेकिन स्थान ने निश्चित रूप से एक अंतर बनाया। यदि आप इसे डेटासोर्स एक्सएमएल से पहले रखते हैं, तो यह विज्ञापन के रूप में काम करता है। मैं अनजान था कि आदेश वसंत में एक फर्क पड़ता है। इसके अलावा, वसंत डिफ़ॉल्ट रूप से "jdbc: hsqldb: mem: testdb", विशेष रूप से, "testdb" लगता है। मैं अलग-अलग नामकरण कर रहा था और वसंत स्मृति में "testdb" शुरू कर रहा था। जब मैंने अपनी "testdb" में बदल दिया, बिंगो, सब ठीक काम किया। धन्यवाद! – markthegrea

0

आप एक फ़ाइल का उपयोग कर सकते हैं: स्मृति में है और किसी भी अपने परीक्षण द्वारा लिखित बदलाव के बिना सभी डेटा के साथ डेटाबेस । यह आपके उद्देश्य की सेवा करनी चाहिए।

पहले URL jdbc:hsqldb:file:initdata के साथ डेटाबेस स्कीमा बनाएं और SHUTDOWN प्रदर्शन करें। तब initdata.properties फाइल करने के लिए files_readonly=true जोड़ने या वैकल्पिक रूप से नीचे दी गई यूआरएल का उपयोग करें:

jdbc:hsqldb:file:initdata;files_readonly=true 

अपने परीक्षण इस डेटाबेस के खिलाफ चलाते हैं, कुछ भी डेटाबेस फ़ाइलों को लिखा है और सभी डेटा स्मृति में है।

संबंधित मुद्दे