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
undVideoServiceImpl
Du musst angemeldet sein, um einen Kommentar abzugeben.
@beerbajay ist richtig, @Transactional, müssen ein dynamischer proxy erzeugt werden, die Ihre Bohne auf anwenden, um die Transaktions-Logik, die erstellt werden können, wenn Ihr Service hat eine Schnittstelle, da in Ihrem Fall ist es nicht eine Alternative wäre, zu beauftragen Frühjahr zum erstellen von Klassen-basierten proxy, der auf folgende Weise: