1

休止状態に強制的に innodb を使用させたかったのです。

そのため、innodb を使用するために「hibernate.dialect」を変更しましたが、mysql に接続できますが、いくつかのトランザクションを実行すると、次のエラーが発生します。

org.springframework.transaction.TransactionSystemException: JPA トランザクションをコミットできませんでした。ネストされた例外は javax.persistence.RollbackException: org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:465) で rol lbackOnly としてマークされたトランザクション org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java: 709) org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:678) で org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321) で org.springframework.transaction.interceptor.TransactionInterceptor .invoke(TransactionInterceptor.java:

ここに私の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>

何か考えはありますか?

4

2 に答える 2

4

を使用すると、スキーマのエクスポート中に DDL を生成するときMySQL5InnoDBDialectに追加するように Hibernate に指示するだけで、それ以上は何もありません。"ENGINE=InnoDB"ただし、既存のテーブルが変更されるかどうかはわかりません。そのため、MyISAM を使用する既存のテーブルがある場合は、それらを手動で変更する必要がある場合があります。

于 2010-06-23T17:15:24.207 に答える
2

Hibernate は、テーブルが Inno であるか、MyISAM であるか、または別のストレージ エンジンであるかについては何も言えません。それは MySQL 側で決定されます。サーバー構成にはデフォルトがあり、テーブルを作成するときにそれらをオーバーライドできます。

違いはトレースを提供しませんでした.MyISAMテーブルでトランザクションを使用するときに起こることは、トランザクションを取得しないことだけです. すべてが成功しますが、分離もロールバックもありません。

@shipmaster によると、トレースは根本的な問題があることを意味しますが、これはおそらく方言の選択とは関係ありません。ログを調べるか、Spring のソースをプロジェクトに添付してトレースします。

于 2010-06-23T17:01:15.863 に答える