Pas de EntityManager avec le réel de la transaction disponibles pour le thread en cours - ne peut pas fiable du processus 'persist' appel

Pas de EntityManager avec le réel de la transaction disponibles pour le thread en cours - ne peut pas fiable du processus 'persist' appel

quand je fais un test avec JUnit, persistent méthode fonctionne et je vois que mon objet est inséré, mais lorsque j'appelle la méthode via mon Contrôleur ne fonctionne pas

voici mon Projet :

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
<!--    <bean id="notification" class="com.app.sqli.notification.NotificationTask" /> -->
<!--    <task:scheduled-tasks> -->
<!--        <task:scheduled ref="notification" method="notifier" cron="*/2 * * * * *"/> -->
<!--    </task:scheduled-tasks> -->
<context:component-scan base-package="com.app.sqli" />  
<mvc:annotation-driven />
<bean id="entityManagerFactoryBean" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.app.sqli.entities" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">validate</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
</props>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/sqli" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactoryBean" />
</bean>
<tx:annotation-driven />
</beans>

ma Classe de Modèle:

package com.app.sqli.models;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Collaborateur {
@Id
private int id;
private String nom;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
}

ma Classe DAO

package com.app.sqli.dao;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import com.app.sqli.models.Collaborateur;
@Repository
public class CollaborateurDao implements IcollaborateurDao{
@PersistenceContext
private EntityManager em;
@Override
public void addCollaborateur(Collaborateur c) {
em.persist(c);
}
}

Ma Classe De Service

package com.app.sqli.services;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.app.sqli.dao.IcollaborateurDao;
import com.app.sqli.models.Collaborateur;
@Service
@Transactional
public class CollaborateurService implements IcollaborateurService{
@Autowired
private IcollaborateurDao cdao;
@Override
public void addCollaborateur(Collaborateur c) {
cdao.addCollaborateur(c);
}
}

Et Mon Contrôleur

package com.app.sqli.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.app.sqli.models.Collaborateur;
import com.app.sqli.services.IcollaborateurService;
@org.springframework.stereotype.Controller
public class Controller {
@Autowired
private IcollaborateurService cserv;
@RequestMapping(value = "/index")
public String index(Model m) {
System.out.println("insertion ...");
Collaborateur c = new Collaborateur();
c.setId(11);
c.setNom("nom");
cserv.addCollaborateur(c);
return "index";
}
}
Qu'est-ce que l'exception que vous obtenez? Sans connaître l'exception de la seule chose que je peux penser à est de à l'aide de la PersistenceContextType.Étendu sur votre EM. @PersistenceContext(type=PersistenceContextType.ÉTENDU) de l'EntityManager em;
l'Erreur que je suis arriver : org.springframework.web.util.NestedServletException: traitement de la Requête a échoué; nested exception javax.la persistance.TransactionRequiredException: Pas de EntityManager avec le réel de la transaction disponibles pour le thread en cours - ne peut pas fiable du processus 'persist' appel
Avez-vous essayé avec PersistanceContextType.Prolongée? En un mot, ce qui change à partir de la transaction-champ EM à un stateful session bean...
il semble être résolu, Maintenant, j'ai ce message d'erreur : entité Inconnue: com.app.sqli.modèles.Collaborateur
PackagesToScan dit que votre entités devrait être dans ce package com.app.sqli.les entités mais votre entité est dans: com.app.sqli.les modèles... Ils ont de match, afin de déplacer votre entité pour le bon package ou de modifier packagesToScan pour correspondre à l'ensemble de vos entités

OriginalL'auteur Mohamed Nabli | 2015-11-18