EntityManager + @Transactional

@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/>

Die Transaktion im service-Methode speichern(Video) ist nie angefangen, also auch noch nie verübt. Wo ist der Fehler??? Wenn ich EntityManagerFactory es funktioniert perfekt, aber ich möchte nicht explizit begin und commit der Transaktion. Ich möchte es mit @Transactional-annotation.

  • Bekommst du irgendwelche Fehler?
  • Ich bin mir ziemlich sicher, Sie haben eine Schnittstelle für das transactional-Annotationen angewendet werden, z.B. VideoService und VideoServiceImpl
Schreibe einen Kommentar