Jak mogę uzyskać Hibernate (używając JPA) do tworzenia tabel MySQL InnoDB (zamiast MyISAM)? Znalazłem rozwiązania, które będą działać podczas używania Hibernate do generowania pliku SQL do tworzenia tabel, ale nic, co działa "w locie".Hibernate: Utwórz tabele Mysql InnoDB zamiast MyISAM
Odpowiedz
nie można określić dialekt hibernacji i używać org.hibernate.dialect.MySQLInnoDBDialect
To wykonało zadanie! Dzięki! –
Pamiętaj, że ta odpowiedź jest teraz przestarzała. Obecnym sugerowanym podejściem jest użycie właściwości 'hibernate.dialect.storage_engine = innodb'. Zobacz http://in.relation.to/2017/02/20/mysql-dialect-refactoring/ – Jules
Czy określania ustawienia dialekt w konfiguracji hibernacji? Jeśli nie, to Hibernate spróbuje automatycznie wykryć dialekt bazy danych i wybierze najbezpieczniejszy dialekt MySQL, którym jest MyISAM MySQL 4.
Można nadać mu specyficzny dialekt, dodając to do swoich właściwości Hibernacja:
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
Tak, mieliśmy zestaw MySQL5Dialect. Dzięki za wskazówkę! –
starałem się używać hibernate4 z wiosny 3.2 i zawinąć go w JPA.
Skończyłem na tworzeniu własnej klasy ... skopiowałem całą zawartość org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter do mojego pliku klasy i zmodyfikowałem wyjście jednego podprogramu, aby zmienić Dialekt MySQL na MySQL5InnoDBDialect. Sądzę, że mogłem rozszerzyć klasę.
Zresztą ...
Modified jak:
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;
}
}
}
Można by pomyśleć, że jest to 'włamać', ale przypuszczam, że to będzie działać. W konfiguracji kontekstowej Spring dodano:
<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>
Następnie moja klasa jest używana dla komponentu bean "bazy danych". (Bez skanowania komponent, moje zajęcia są wymienione w META-INF/persistence.xml (domyślna lokalizacja))
Och, chłopcze .... przepraszam chłopaki ... więcej Googling daje inny wynik wyszukiwania:
<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>
Nie trzeba więc rozszerzać ani zmieniać klasy ... Powinienem przeczytać nieco wcześniej oryginalny kod źródłowy oryginalnego HibernateJpaVendorAdapter, zanim odpowiem. Wpadło mi to na właściwość "databasePlatform" ...
Od czasów hibernacji 5.2.8 klasy Mysql*InnoDBDialect
używane przez inne odpowiedzi są przestarzałe. Nowe rozwiązanie jest ustawienie następującą właściwość:
hibernate.dialect.storage_engine = innodb
Zobacz http://in.relation.to/2017/02/20/mysql-dialect-refactoring/ więcej szczegółów.
z spring-boot 2.0.0M7 następujące nie działa dla mnie (mysqld 5.7)
spring.jpa.hibernate.use-new-id-generator-mappings: true
spring.jpa.database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
- 1. mysql innodb vs myisam insert
- 2. MySQL Atomic UPDATE w InnoDB vs MyISAM
- 3. Innodb i tymczasowe tabele
- 4. InnoDB vs. czas wprowadzania zapytania MyISAM
- 5. InnoDB lub MyISAM - dlaczego nie oba?
- 6. Czy tabele bazy danych systemu MySQL można przekonwertować na InnoDB?
- 7. różnica mysql w użyciu indeksu MyISAM i InnoDB między
- 8. Utwórz bazę danych innodb w mysql
- 9. Błąd InnoDB w Mysql
- 10. Jaki jest najbezpieczniejszy sposób konwersji tabeli z InnoDB na MyISAM?
- 11. zmiana domyślnego silnika mysql na innodb
- 12. Przetwarzanie pełnotekstowe MySQL Obejście tabel innoDB
- 13. mysql innodb: innodb_flush_method
- 14. Jak określić typ bazy danych mysql: czy to InnoDB, czy MyISAM?
- 15. Silnik bazy danych MySQL: MyISAM dla information_schema ale InnoDB dla innych baz danych
- 16. co jest równoważne wersja MyISAM na pokaz statusu InnoDB w MySQL
- 17. wyszukiwanie pełnotekstowe z InnoDB w MySQL
- 18. Pętla MySQL poprzez tabele
- 19. MySQL 5.6 InnoDB Pełnotekstowe wyszukiwanie
- 20. Mysql innoDB ciągle się zawiesza
- 21. Hibernate/MySQL problem współbieżności
- 22. Jak mogę się dowiedzieć, czy moja tabela jest MyISAM i InnoDB
- 23. Jak wstępnie załadować tabele do puli buforów INNODB za pomocą MySQL?
- 24. Tabele statyczne pamięci podręcznej Mysql
- 25. MySQL Utwórz unikalną kombinację kolumn
- 26. Utwórz nową aplikację Ruby on Rails używając MySQL zamiast SQLite
- 27. CannotAcquireLockException (Spring, Hibernate, Mysql)
- 28. Porady dotyczące optymalizacji wydajności MySQL InnoDB (wstawianie)?
- 29. Używanie "TYPE = InnoDB" w MySQL rzuca wyjątek
- 30. Znajdź najlepszy wiersz pasujący w MySQL (InnoDB)
masz na myśli używając ustawień hbm2ddl config? – skaffman
Tak. Najwyraźniej ustawienie "delimiter = type = InnoDB" działa tylko dla wyjścia skryptu. Próbowałem go z "hibernate.hbm2ddl.auto = create" i otrzymałem tabele MyISAM. –
Utworzono jirę dla tego: [HHH-8050] (https://hibernate.onjira.com/browse/HHH-8050) –