Hibernate mysql innodb

我想强迫hibernate使用innodb。

所以,我改变了“hibernate.dialect”以便拥有innodb,但我可以连接到mysql,但是当我做一些事务时,我有以下错误:

org.springframework.transaction.TransactionSystemException:无法提交JPA事务; 嵌套exception是javax.persistence.RollbackException:org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:465)org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java)中标记为rol lbackOnly的事务: 709)在org.springframework.transaction.intercts.TransactionInterceptor的org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)的org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:678)位于org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)的.invoke(TransactionInterceptor.java:116)org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)at $ Proxy46 .deleteAsset(未知来源)

这是我的persistence.xml:

   org.hibernate.ejb.HibernatePersistence       <!--      -->             

你有什么主意吗 ?

Hibernate没有说明表是Inno,MyISAM还是其他存储引擎 – 这是在MySQL方面决定的。 服务器配置中有默认值,您可以在创建表时覆盖它们。

差异不会给你跟踪 – 当你在MyISAM表上使用事务时发生的一切,你没有得到任何交易。 一切都成功,但没有隔离,没有回滚。

根据@shipmaster,您的跟踪意味着您有潜在的问题,这可能与您的方言选择无关。 查看日志,或将Spring的源附加到项目中并跟踪它们。

使用MySQL5InnoDBDialect只是告诉Hibernate在模式导出期间生成DDL时添加"ENGINE=InnoDB" ,仅此而已。 我不确定现有的表格会被改变。 因此,如果您使用MyISAM存在现有表,则可能必须手动更改它们。