EntityManager ne peut pas utiliser persistent pour économiser de l'élément à la base de données

J'ai rencontré le problème de la persistance de l'élément à la base de données à l'aide de l'EntityManager. Sur la base des réponses que j'ai trouvé, j'ai essayé ces 4 façons dans mon DaoJpa de faire une telle chose, mais encore échoué. Ici j'ai attaché les quatre façons j'ai essayé:

Code de Contrôleur de la partie:

   @Transactional 
   SmartProduct smartProduct = new SmartProduct();
            smartProduct.setName("Dove Soap");
            smartProductDao.persist(smartProduct);

1.
DaoJpa:

 @Transactional
 public void persist(SmartProduct smartProduct) {
            entityManager.persist(smartProduct);

Ne fonctionne pas!

2.

@Transactional
public void persist(SmartProduct smartProduct) {
entityManager.persist(smartProduct);
entityManager.flush();

Exception que j'ai eu: aucune transaction n'est en cours

3.

@Transactional
public void persist(SmartProduct smartProduct) {
EntityTransaction emTransaction = entityManager.getTransaction();
        emTransaction.begin();  
        entityManager.persist(smartProduct);
        emTransaction.commit();
        entityManager.close();

Exception que j'ai obtenu:
Pas autorisés à créer de la transaction sur le partage de l'EntityManager - utiliser le Printemps
des transactions ou des EJB CMT au lieu

4.

@Transactional
public void persist(SmartProduct smartProduct) {
                    EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistenceUnit");
                EntityManager em = emf.createEntityManager();
                EntityTransaction etx = em.getTransaction();
                etx.begin();
                em.persist(smartProduct);
                etx.commit();
                em.close();
                emf.close();

Exception que j'ai obtenu:
L'application doit fournir des connexions JDBC

Quelqu'un pourrait-il m'aider à comprendre le problème s'il vous plaît? Merci beaucoup d'avance!

Merci beaucoup JustinKSU de l'aide. J'ai ajouter l'annotation au Printemps contexte, et c'est résolu!
Voici la version précédente de mon Ressort contexte:

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

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

    <bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
        <property name="persistenceUnitName" value="persistenceUnit" />
        <property name="dataSource" ref="dataSource" />
    </bean>

Après l'ajout de la

<tx:annotation-driven />

cela fonctionne:

<tx:annotation-driven />
    <bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

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

    <bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
        <property name="persistenceUnitName" value="persistenceUnit" />
        <property name="dataSource" ref="dataSource" />
    </bean>
  • Avez-vous essayé d'utiliser @Transactional sur la poursuite de la méthode?
  • Désolé j'ai oublié de le mentionner dans le post. Oui j'ai ajouté @Transactional avant la méthode dans tous les quatre façons. Aussi j'ai essayé d'ajouter (readOnly = true)/(readOnly = false)après Transactionnelle annotation, et a même ajouté (propagation = Propagation.NÉCESSAIRE), mais ne semble pas faire de différence.
  • Êtes-vous à l'aide de @PersistenceContext à injecter de l'entityManager?
  • Oui je l'ai ajouté au début de la manette: @PersistenceContext private EntityManager entityManager;
  • Si vous êtes à l'aide d'annotations avez-vous cela dans votre Printemps contexte <tx:annotation-driven /> avec la définition d'un transactionManager d'injecter de l'entité gestionnaire?
  • J'ai vérifié les haricots dans les Éléments de Ressort, et en vertu de la section Transactionnelle, il est "context:component-scan smartProductDaoJpa", qui est la Jpa-je utiliser l'entityManager à persister choses. mais pas sûr de savoir si est-ce le contexte que vous avez mentionné