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
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
Vous devez vous connecter pour publier un commentaire.
merci @mechkov pour votre temps et votre aide,
Mon problème est résolu en modifiant mon fichier de configuration, j'ai donc utilisé une Configuration de Classe avec des annotations et sa fonctionne si bien, je Ne sais toujours pas où était le problème
Eh oui, même ici (besoin @EnableTransactionManagement) mais aussi j'ai glané une pépite de cette réponse - une meilleure mise en place pour mes haricots - j'étais en fournissant les poseurs de LocalContainerEntityManagerFactorybean pour la source de données et jpaVendorAdapter avec des appels à la définition de haricot méthodes!Je suppose que c'est à contre-courant de la gestion des conteneurs et des doutes des effets secondaires, mais j'ai rattrapé tout ce qui est après la lecture de ce et mes problèmes ont disparu 😀
OriginalL'auteur Mohamed Nabli
Je ne sais pas si quelqu'un qui est de la lecture de ce (aujourd'hui) a le même cas que le mien, mais j'ai eu le même problème. Heureusement, j'ai pu le résoudre en mettant simplement le suivant dans mon spring-conf.xml:
Remarque: je suis en utilisant déclarative des transactions via des annotations. Donc, si vous le faites, l'annotation de votre méthode avec @Transactional peut aussi résoudre votre problème.
RÉFÉRENCE:
OriginalL'auteur Loa
Juste pour confirmer, que l'ajout de la dernière bean définition résout ce problème !
Ma config classe est comme ci-dessous :
Le service lui-même est comme suit :
OriginalL'auteur dobrivoje