5

Spring 3、JPA 2、および Hibernate 3 でアプリケーションを作成しようとしています。エンティティを永続化すると問題が発生します。何も起こりません。データはデータベースに挿入されず、クエリも実行されません。しかし、query.getResultList() のようなリクエストを使用している場合、select は正しく機能します。

したがって、私の問題は永続化/更新とトランザクションマネージャーのみにあると思いますが、春はあまり得意ではありません。私を助けてくれませんか?

ここに私の設定ファイルがあります:

私のapplicationContext.xml

    <jee:jndi-lookup id="soireeentreamis_DS" jndi-name="jdbc/soireeentreamis" />

    <bean id="persistenceUnitManager"
        class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
        <property name="persistenceXmlLocations">
            <list>
                <value>classpath*:META-INF/persistence.xml</value>
            </list>
        </property>
        <property name="defaultDataSource" ref="soireeentreamis_DS" />
        <property name="dataSources">
            <map>
                <entry key="soireeentreamisDS" value-ref="soireeentreamis_DS" />
            </map>
        </property>
    </bean>

    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitManager" ref="persistenceUnitManager" />
        <property name="persistenceUnitName" value="soireeentreamisPU" />
        <property name="jpaDialect">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
        </property>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="false" />
            </bean>
        </property>
    </bean>

    <bean id="soireeentreamisTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
        <property name="jpaDialect">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
        </property>
    </bean>

    <tx:annotation-driven transaction-manager="soireeentreamisTransactionManager" />

    <context:annotation-config />
</beans>

私のpersistence.xml

    <persistence-unit name="soireeentreamisPU"
        transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <non-jta-data-source>soireeentreamisDS</non-jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            <property name="hibernate.hbm2ddl.auto" value="create"/>
        </properties>
    </persistence-unit>

私のサービス

@Service
@Transactional("soireeentreamisTransactionManager")
public class UserServiceImpl implements UserService ...

私の道

@Repository
public class UserDaoImpl extends GenericDaoImpl<User, String> implements
        UserDao {  
@PersistenceContext(unitName = "soireeentreamisPU")
private EntityManager em;   
public void persist(final User entity) {
        em.persist(entity);
    }
}

誰か助けてくれませんか?

4

3 に答える 3

5

少し前に同様の問題を見つけました。私の場合、dispacher-servlet.xml に以下の行を追加する必要がありました。したがって、これが 2 か所 (applicationContex.xml と dispacher-servlet.xml) に必要です。

<tx:annotation-driven />

そして、何かを明確にするために、オブジェクトを「保存」するサービスメソッドを表示しませんでしたが、 @Transactional で注釈が付けられていると思います-これがないと新しいトランザクションを作成したいからです。

于 2012-11-20T23:00:32.937 に答える
2

これは最近私に起こりました。問題は、あなたがトランザクションの問題と言うように、@Transactional アノテーションを DB を更新するすべてのメソッドに追加することです。次に、CGLIBライブラリを calsspath に追加するか、Maven を使用している場合は pom.xml に追加します。これは、Spring の make トランザクションに必要です。たとえ私が別の方法でそれをやったとしても、それがあなたを助けることを願っています. これが私のdb.xmlで、データベースに関連するすべてのSpring構成があります。

<!-- Scans within the base package of the application for @Components to configure as beans -->

<context:property-placeholder location="classpath:db.properties"/>

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="true" />
            <property name="generateDdl" value="true" />
            <property name="databasePlatform" value="${db.dialect}" />
        </bean>
    </property>
</bean>

<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"
    destroy-method="close">
    <property name="driverClass" value="${db.driver}" />
    <property name="jdbcUrl" value="${db.url}" />
    <property name="username" value="${db.username}" />
    <property name="password" value="${db.password}" />
    <property name="idleConnectionTestPeriodInMinutes" value="1" />
    <property name="idleMaxAgeInMinutes" value="4" />
    <property name="maxConnectionsPerPartition" value="30" />
    <property name="minConnectionsPerPartition" value="10" />
    <property name="partitionCount" value="3" />
    <property name="acquireIncrement" value="5" />
    <property name="statementsCacheSize" value="100" />
    <property name="releaseHelperThreads" value="3" />
</bean>

<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
    <property name="jpaDialect" ref="jpaDialect"/>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

<bean
    class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

そして、ここに私のpersistence.xmlがあります

<persistence version="2.0"
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_2_0.xsd">

<persistence-unit name="pu-app" transaction-type="RESOURCE_LOCAL">


</persistence-unit>

于 2012-11-20T14:45:24.423 に答える
0

モデル オブジェクトを persistence.xml ファイルに追加する必要があります。プロバイダ要素のすぐ下に追加

<class>com.your.domain.object.User</class>
于 2012-11-20T13:54:29.607 に答える