Comment puis-je obtenir Hibernate (en utilisant JPA) pour créer des tables MySQL InnoDB (au lieu de MyISAM)? J'ai trouvé des solutions qui fonctionneront en utilisant Hibernate pour générer un fichier SQL pour créer les tables, mais rien qui fonctionne "à la volée".Hibernate: Créer des tables MySQL InnoDB au lieu de MyISAM
Répondre
Ne peut pas vous indiquer le dialecte Hibernate et utiliser org.hibernate.dialect.MySQLInnoDBDialect
Cela a fait le travail! Merci! –
Notez que cette réponse est maintenant obsolète. L'approche actuellement proposée consiste à utiliser la propriété 'hibernate.dialect.storage_engine = innodb'. Voir http://in.relation.to/2017/02/20/mysql-dialect-refactoring/ – Jules
Vous spécifiez le paramètre dialecte dans votre configuration de mise en veille prolongée? Si ce n'est pas le cas, Hibernate tentera de détecter automatiquement le dialecte de la base de données et choisira le dialec MySQL le plus sûr, MySQL 4 MyISAM.
Vous pouvez donner un dialecte spécifique, en ajoutant ceci à vos propriétés de mise en veille prolongée:
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
Oui, nous avions l'ensemble MySQL5Dialect. Merci pour le conseil! –
Je tentais d'utiliser hibernate4 avec Spring 3.2 et l'envelopper dans JPA. J'ai fini par créer ma propre classe .... J'ai copié tout le contenu de org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter dans mon propre fichier de classe et j'ai modifié la sortie d'un sous-programme pour changer le dialecte MySQL. MySQL5InnoDBDialect. Je suppose que j'aurais pu prolonger la classe.
... Quoi qu'il en soit
Modifié par:
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;
}
}
}
Vous pourriez penser que c'est un 'hack', mais je suppose que cela fonctionnera. Dans la configuration de contexte Spring, j'ai ajouté:
<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>
Alors ma classe est utilisée pour le haricot adaptateur « base de données ». (Pas de balayage des composants, mes cours sont répertoriés dans META-INF/persistence.xml (l'emplacement par défaut))
Oh boy .... désolé les gars ... plus googler donne un autre résultat de la recherche:
<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>
Ainsi, vous n'avez pas besoin d'étendre ou de modifier une classe ... vous devriez avoir lu le code source original de l'original HibernateJpaVendorAdapter un peu plus avant de répondre. Cela m'a cloué dans la propriété "databasePlatform" ...
À partir d'Hibernate 5.2.8, les classes Mysql*InnoDBDialect
utilisées par les autres réponses sont obsolètes. La nouvelle solution consiste à définir la propriété suivante:
hibernate.dialect.storage_engine = innodb
Voir http://in.relation.to/2017/02/20/mysql-dialect-refactoring/ pour plus de détails.
Avec le printemps-démarrage 2.0.0M7 suivante ne fonctionnait pour moi (mysqld 5,7)
spring.jpa.hibernate.use-new-id-generator-mappings: true
spring.jpa.database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
- 1. Tables à langer de MyISAM à InnoDB font lente
- 2. Tables MyISAM se corrompent
- 3. Table de conversion de MyISAM à INNODB
- 4. quelle est la version équivalente de MyISAM pour afficher l'état de InnoDB dans MySQL
- 5. MySQL InnoDB CASCADE?
- 6. Jeu minimum de fichiers nécessaires pour récupérer une table MySQL (MyISAM et InnoDB)
- 7. Comment utilisez-vous les tables MySQL InnoDB sur OS X?
- 8. Fourchette MySQL INSERT INTO (InnoDB)
- 9. "System lock" dans MySQL + MyISAM
- 10. MySQL PBXT vs InnoDB
- 11. InnoDB impasse avec lecture-uncommited! - Java - Glassfish - EJB3 (JPA/Hibernate)
- 12. Migrer les tables InnoDB vers PBXT
- 13. Est-il possible d'utiliser des clés étrangères Mysql dans les tables InnoDB pour une recherche inverse?
- 14. MyISAM ou InnoDB, pour la sécurité des données, que dois-je choisir?
- 15. mysql: Comment libérer de l'espace (innodb)
- 16. Pouvons-nous créer des tables dynamiquement dans MySQL?
- 17. obtenir la valeur maximale en php (au lieu de mysql)
- 18. Hibernate: mappage 3 tables
- 19. Mysql InnoDB "erreur 32" sur Windows
- 20. MySQL MYISAM problème de concurrence avec deux processus
- 21. Créer une nouvelle application Ruby on Rails en utilisant MySQL au lieu de SQLite
- 22. Comment créer des relations dans MySQL
- 23. Interrogation deux tables ... dans MySQL
- 24. Comment configurer Artifactory en utilisant PostgreSQL au lieu de MySQL?
- 25. Joindre des tables - MySQL & PHP
- 26. requête: produit croisé au lieu de rejoindre
- 27. tables sont vides dans MySQL
- 28. Héritage au lieu de typedef
- 29. MYSQL MyISAM Comment inscrire 2 instruction select + select count
- 30. lu. [TableName] au lieu de dbo. [TableName]?
Voulez-vous dire en utilisant les paramètres de configuration de hbm2ddl? – skaffman
Oui. Apparemment, définir 'delimiter = type = InnoDB' fonctionne uniquement pour la sortie du script. Je l'ai essayé avec 'hibernate.hbm2ddl.auto = create' et j'ai obtenu des tables MyISAM. –
Créé un jira pour cela: [HHH-8050] (https://hibernate.onjira.com/browse/HHH-8050) –