簡體   English   中英

休眠mysql innodb

[英]Hibernate mysql innodb

我想強制休眠使用innodb。

因此,為了擁有innodb,我更改了“ hibernate.dialect”,但是我可以連接到mysql,但是當我執行某些事務時,出現以下錯誤:

org.springframework.transaction.TransactionSystemException:無法提交JPA事務; 嵌套異常是javax.persistence.RollbackException:僅在org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:465)處標記為rol lback的事務709),位於org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:678),位於org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321),位於org.springframework.transaction.interceptor.TransactionInter在org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)處的org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)處的.invoke(TransactionInterceptor.java:116)在$ Proxy46 .deleteAsset(來源不明)

這是我的persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
    <persistence-unit name="name" transaction-type="RESOURCE_LOCAL">         
        <provider>org.hibernate.ejb.HibernatePersistence</provider>      
        <properties>
            <property name="hibernate.archive.autodetection" value="class, hbm"/>
            <property name="hibernate.show_sql" value="false"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>                      
            <property name="hibernate.hbm2ddl.auto" value="update"/>    
            <!--        
            <property name="hibernate.c3p0.min_size" value="5"/>
            <property name="hibernate.c3p0.max_size" value="20"/>
            <property name="hibernate.c3p0.timeout" value="300"/>
            <property name="hibernate.c3p0.max_statements" value="50"/>
            <property name="hibernate.c3p0.idle_test_period" value="3000"/>     
            --> 
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.connection.url" value="jdbc:mysql://xxxxxx"/>
            <property name="hibernate.connection.username" value="xxxxx"/>
            <property name="hibernate.connection.password" value="xxxxxx"/>

            <property name="defaultAutoCommit" value="false"/>

            <!-- Connection auto reconnect after long inactivity -->
            <property name="connection.autoReconnect" value="true"/>
            <property name="connection.autoReconnectForPools" value="true"/>
            <property name="connection.is-connection-validation-required" value="true"/>
        </properties>
    </persistence-unit>         
</persistence>

你有什么主意嗎 ?

使用MySQL5InnoDBDialect只是告訴Hibernate在模式導出過程中生成DDL時添加"ENGINE=InnoDB" 我不確定現有表格是否會被更改。 因此,如果您已有使用MyISAM的表,則可能必須手動更改它們。

Hibernate對於表是Inno,MyISAM還是其他存儲引擎沒有發言權-這是在MySQL方面決定的。 服務器配置中有默認值,您可以在創建表時覆蓋它們。

差異不會給您帶來跟蹤-當您在MyISAM表上使用事務時,所有操作都會發生,因為您沒有事務。 一切都成功了,但是沒有隔離,沒有回滾。

根據@shipmaster,您的跟蹤記錄表明您有潛在的問題,這可能與您選擇的方言無關。 查看日志,或將Spring的源代碼附加到項目中並進行跟蹤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM