4
@Service
@Repository
@Transactional
public class VideoService  {

    @PersistenceContext
    EntityManager entityManager;

    public void save(Video video) {

        Video video1 = new Video();

        entityManager.persist(video1);

    }



<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
    <persistence-unit name="video_pu" transaction-type="RESOURCE_LOCAL" >
        <provider>org.hibernate.ejb.HibernatePersistence</provider>

        <properties>
            <property name="hibernate.hbm2ddl.auto" value="create-drop" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        </properties>

    </persistence-unit>
</persistence>


<bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost/video" />
        <property name="username" value="root" />
        <property name="password" value="root" />
    </bean>     

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
      <property name="persistenceUnitName" value="video_pu"/>
      <property name="dataSource" ref="dataSource" />      
      <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="org.hibernate.dialect.MySQLDialect" />
        </bean>
     </property>

    </bean>



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

    <!-- enable the configuration of transactional behavior based on annotations -->
    <tx:annotation-driven transaction-manager="transactionManager"/>


    <!-- post-processors for all standard config annotations -->
    <context:annotation-config/>

サービス メソッド save(Video video) のトランザクションは開始されないため、コミットもされません。エラーはどこにありますか? EntityManagerFactory を使用すると完全に機能しますが、トランザクションを明示的に開始してコミットしたくありません。@Transactional アノテーションで使いたい。

4

1 に答える 1

3

@beerbajay は正しいです。@Transactional は、トランザクション ロジックを適用するために Bean に動的プロキシを作成する必要があります。これは、Service にインターフェイスがある場合に作成できます。クラスベースのプロキシを作成するには、次のようにします。

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class='true/>
于 2012-06-13T14:28:23.437 に答える