2009-09-22 15 views
19

के बजाय MySQL InnoDB तालिकाओं को बनाएँ MySQL InnoDB तालिकाओं (MyISAM के बजाय) बनाने के लिए मैं हाइबरनेट (जेपीए का उपयोग करके) कैसे प्राप्त कर सकता हूं? मुझे ऐसे समाधान मिल गए हैं जो टेबल बनाने के लिए SQL फ़ाइल उत्पन्न करने के लिए हाइबरनेट का उपयोग करते समय काम करेंगे, लेकिन कुछ भी नहीं जो "फ्लाई पर" काम करता है।हाइबरनेट: MyISAM

+0

के लिए काम किया है आप hbm2ddl config सेटिंग्स का उपयोग कर मतलब है? – skaffman

+0

हां। जाहिर है कि 'delimiter = type = InnoDB' केवल स्क्रिप्ट आउटपुट के लिए काम करता है। मैंने इसे 'hibernate.hbm2ddl.auto = create' के साथ करने की कोशिश की और MyISAM टेबल मिला। –

+0

इसके लिए एक जिरा बनाया: [एचएचएच -8050] (https://hibernate.onjira.com/browse/HHH-8050) –

उत्तर

28

आप हाइबरनेट बोली निर्दिष्ट और org.hibernate.dialect.MySQLInnoDBDialect

+0

यह काम किया! धन्यवाद! –

+7

ध्यान दें कि यह उत्तर अब बहिष्कृत है। वर्तमान सुझाया गया दृष्टिकोण संपत्ति 'hibernate.dialect.storage_engine = innodb' का उपयोग करना है। Http://in.relation.to/2017/02/20/mysql-dialect-refactoring/ – Jules

9

का उपयोग आप अपने हाइबरनेट विन्यास में बोली सेटिंग को निर्दिष्ट कर रहे हैं नहीं कर सकते? यदि नहीं, तो हाइबरनेट डेटाबेस बोली को स्वत: पहचानने का प्रयास करेगा, और सबसे सुरक्षित MySQL dialec का चयन करेगा, जो MySQL 4 MyISAM है।

आप इसे एक विशिष्ट बोली दे सकते हैं अपने हाइबरनेट गुण को यह जोड़कर:

hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect 
+0

देखें हाँ हमारे पास MySQL5Dialect सेट था। पारितोषिक के लिए धन्यवाद! –

1

मैं वसंत 3.2 के साथ hibernate4 का उपयोग करें और जेपीए में लपेट के लिए कोशिश कर रहा था।

मैंने अपनी खुद की कक्षा बनाने का अंत किया .... org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter की अपनी सामग्री को अपनी खुद की कक्षा फ़ाइल में कॉपी किया और MySQL बोली को बदलने के लिए एक subroutine के आउटपुट को संशोधित किया MySQL5InnoDBDialect। मुझे लगता है कि मैं कक्षा बढ़ा सकता था।

वैसे भी

...

के रूप में संशोधित:

package com.imk.dao.hibernate; 

public class HibernateJpaVendorAdapter extends AbstractJpaVendorAdapter { 

[ snip snip snip --- use the original code ] 

protected Class determineDatabaseDialectClass(Database database) { 
    switch (database) { 
    case DB2: 
     return DB2Dialect.class; 
    case DERBY: 
     return DerbyDialect.class; 
    case H2: 
     return H2Dialect.class; 
    case HSQL: 
     return HSQLDialect.class; 
    case INFORMIX: 
     return InformixDialect.class; 
    case MYSQL: 
     return MySQL5InnoDBDialect.class; 
    case ORACLE: 
     return Oracle9iDialect.class; 
    case POSTGRESQL: 
     return PostgreSQLDialect.class; 
    case SQL_SERVER: 
     return SQLServerDialect.class; 
    case SYBASE: 
     return SybaseDialect.class; 
    default: 
     return null; 
    } 
} 

} 

आपको लगता है कि हो सकता है यह एक 'हैक' है, लेकिन, मैं यह काम करेगा लगता है। स्प्रिंग संदर्भ कॉन्फ़िगरेशन में, मैंने जोड़ा:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="persistenceUnitName" value="MosJPA" /> 
    <property name="jpaVendorAdapter"> 
     <bean class="com.imk.dao.hibernate.HibernateJpaVendorAdapter"> 
      <property name="database" value="MYSQL" /> 
     </bean> 
    </property> 
</bean> 

तब मेरी कक्षा "डेटाबेस" एडाप्टर बीन के लिए उपयोग की जाती है। (कोई घटक स्कैनिंग, मेरी कक्षाओं META-INF/persistence.xml (डिफ़ॉल्ट स्थान) में सूचीबद्ध हैं)

0

ओह, लड़का .... खेद लोग ... और Googling एक और खोज परिणाम देता है:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="persistenceUnitName" value="MosJPA" /> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> 
     </bean> 
    </property> 
</bean> 

तो, आपको कक्षा का विस्तार या परिवर्तन करने की आवश्यकता नहीं है ... मैंने जवाब देने से पहले मूल HibernateJpaVendorAdapter के मूल स्रोत कोड को पढ़ना चाहिए था। जिसने मुझे "डेटाबेसप्लेटफार्म" संपत्ति में चिपकाया ...

2

हाइबरनेट 5.2.8 के रूप में, अन्य उत्तरों द्वारा उपयोग की जाने वाली Mysql*InnoDBDialect कक्षाएं बहिष्कृत हैं। नया समाधान निम्नलिखित संपत्ति को सेट करना है:

hibernate.dialect.storage_engine = innodb 

अधिक जानकारी के लिए http://in.relation.to/2017/02/20/mysql-dialect-refactoring/ देखें।

0

वसंत-बूट 2.0.0M7 साथ निम्नलिखित मुझे (mysqld 5,7)

spring.jpa.hibernate.use-new-id-generator-mappings: true 
spring.jpa.database-platform: org.hibernate.dialect.MySQL5InnoDBDialect