IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Spring JPA org.hibernate.PersistentObjectException: detached entity passed to persist [Data]


Sujet :

Spring Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Spring JPA org.hibernate.PersistentObjectException: detached entity passed to persist
    j'essaye de faire un commit de mon Objet appelé plat depuis mon controller
    Mais j'obtiens une stacktrace suivante



    sur ma couche DAO
    public void persist(T t) {
    jpaTemplate.persist(t);
    }


    quelqu'un pourrait il maider ??
    quest ce que jai oublié ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     
    org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: com.myshop.domain.plate.Plat; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: com.myshop.domain.plate.Plat
    	at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:651)
    	at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:100)
    	at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
    	at org.springframework.orm.jpa.JpaAccessor.translateIfNecessary(JpaAccessor.java:152)
    	at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:188)
    	at org.springframework.orm.jpa.JpaTemplate.persist(JpaTemplate.java:262)
    	at com.myshop.dao.plate.AbstractDAO.persist(AbstractDAO.java:43)
    	at com.myshop.dao.plate.PlatHome.persist(PlatHome.java:17)
    	at com.myshop.service.plate.PlatService.persist(PlatService.java:29)
    	at com.myshop.controller.plate.PlatController.create(PlatController.java:48)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
    	at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:421)
    	at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:409)
    	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:774)
    	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
    	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
    	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
    	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
    	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
    	at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:285)
    	at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
    	at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:195)
    	at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:159)
    	at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141)
    	at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90)
    	at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:417)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
    	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
    	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
    	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
    	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
    	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
    	at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
    	at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
    	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    	at org.mortbay.jetty.Server.handle(Server.java:324)
    	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
    	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
    	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648)
    	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
    	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
    	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
    	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
    Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: com.myshop.domain.plate.Plat
    	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:102)
    	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
    	at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:645)
    	at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:619)
    	at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:623)
    	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:220)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365)
    	at $Proxy24.persist(Unknown Source)
    	at org.springframework.orm.jpa.JpaTemplate$5.doInJpa(JpaTemplate.java:264)
    	at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:183)
    	... 51 more
    2010-09-21 14:45:02.012::WARN:  Nested in org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: com.myshop.domain.plate.Plat; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: com.myshop.domain.plate.Plat:
    org.hibernate.PersistentObjectException: detached entity passed to persist: com.myshop.domain.plate.Plat
    	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:102)
    	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
    	at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:645)
    	at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:619)
    	at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:623)
    	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:220)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365)
    	at $Proxy24.persist(Unknown Source)
    	at org.springframework.orm.jpa.JpaTemplate$5.doInJpa(JpaTemplate.java:264)
    	at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:183)
    	at org.springframework.orm.jpa.JpaTemplate.persist(JpaTemplate.java:262)
    	at com.myshop.dao.plate.AbstractDAO.persist(AbstractDAO.java:43)
    	at com.myshop.dao.plate.PlatHome.persist(PlatHome.java:17)
    	at com.myshop.service.plate.PlatService.persist(PlatService.java:29)
    	at com.myshop.controller.plate.PlatController.create(PlatController.java:48)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
    	at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:421)
    	at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:409)
    	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:774)
    	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
    	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
    	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
    	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
    	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
    	at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:285)
    	at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
    	at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:195)
    	at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:159)
    	at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141)
    	at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90)
    	at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:417)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
    	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
    	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
    	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)

    Mon Service :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    package com.myshop.service.plate;
     
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Propagation;
    import org.springframework.transaction.annotation.Transactional;
     
    import com.myshop.dao.plate.IPlatHome;
    import com.myshop.domain.plate.Plat;
     
    @Service("platService")
    @Transactional(propagation = Propagation.REQUIRED, readOnly = true)
    public class PlatService implements IPlateService{
     
     
    	@Autowired
    	private IPlatHome mPlatDao;
     
    	public Plat findById(Integer id) {
    		return mPlatDao.findById(id);
    	}
     
    	public Plat merge(Plat detachedInstance) {
    		return mPlatDao.merge(detachedInstance);
    	}
     
    	public void persist(Plat transientInstance) {
    		mPlatDao.persist(transientInstance);
    	}
     
    	public void remove(Plat persistentInstance) {
    		mPlatDao.remove(persistentInstance);
    	}
     
    }

    Mon DAO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
     
     
    package com.myshop.dao.plate;
     
    import java.util.Collection;
     
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.PersistenceContext;
    import javax.persistence.PersistenceContextType;
    import javax.persistence.PersistenceUnit;
     
    import org.springframework.orm.jpa.JpaTemplate;
    import org.springframework.transaction.annotation.Transactional;
     
     
    public abstract class AbstractDAO<T>  {
     
            private Class<T> entityClass;
     
            protected JpaTemplate jpaTemplate;
     
            protected Class<T> getEntityClass() {
                    return entityClass;
            }
     
            @PersistenceUnit(name="jpaTutos")
            public void setEntityManagerFactory(EntityManagerFactory emf) {
                    this.jpaTemplate = new JpaTemplate(emf);
            }
     
            @SuppressWarnings("unchecked")
            public AbstractDAO(Class<T> entityClass) {
                    this.entityClass = entityClass;
            }
     
     
     
            @SuppressWarnings("unchecked")
            public Collection<T> getAll() {
                    return jpaTemplate.find("from " + entityClass.getSimpleName());
            }
     
     
            public void persist(T t) {
     
        		jpaTemplate.persist(t);
        	}
     
            public T getById(Long id) {
                    return jpaTemplate.find(entityClass, id);
            }
     
            public void remove(T t) {
                    jpaTemplate.remove(t);
            }
     
            /*
            public void removeById(final Long id) {
                    jpaTemplate.execute(new JpaCallback() {
                            @Override
                            public Object doInJpa(EntityManager em) {
                                    Query q =
                                            em.createQuery("delete " + entityClass.getSimpleName() + " e where e.id = :id");
                                    q.setParameter("id", id);
                                    q.executeUpdate();
                                    return null;
                            }
                    });
            }*/
     
            public void removeById(final Long id) {
                    jpaTemplate.remove(jpaTemplate.find(entityClass, id));
                    /*jpaTemplate.execute(new JpaCallback() {
                            @Override
                            public Object doInJpa(EntityManager em) {
                                    Object entity = em.find(entityClass, id);
                                    em.remove(entity);
                                    return null;
                            }
                    });*/
            }
     
     
            public void update(T t) {
                    jpaTemplate.merge(t);
            }
     
    }
     
     
    package com.myshop.dao.plate;
     
    // Generated 19 sept. 2010 16:22:36 by Hibernate Tools 3.2.4.GA
     
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.stereotype.Repository;
     
    import com.myshop.domain.plate.Plat;
     
     
    /**
     * Home object for domain model class Plat.
     * @see com.myshop.domain.plate.Plat
     * @author Hibernate Tools
     */
    @Repository
    public class PlatHome extends AbstractDAO<Plat> implements IPlatHome {
     
    	private static final Log log = LogFactory.getLog(PlatHome.class);
     
     
    	public PlatHome(){
    		super(Plat.class);
    	}
     
     
    	public Plat findById(Integer id) {
    		// TODO Auto-generated method stub
    		return null;
    	}
     
     
    	public Plat merge(Plat detachedInstance) {
    		// TODO Auto-generated method stub
    		return null;
    	}
     
     
    }
    Ma configuraion JPA Spring :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
     
    <?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:util="http://www.springframework.org/schema/util"
    	xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop"
    	xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
    		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd
    		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
     
     
    	<!--  Déclaration du PropertyPlaceholderConfigurer -->
    	<bean id="propertyConfigurer"
    		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    		<property name="locations">
    			<list>
    				<value>classpath*:db.properties</value>
    			</list>
    		</property>
    	</bean>
     
    	<!-- traduction des exceptions -->
    	<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
     
     
    	<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
     
    	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    		<property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"></property>
    		<property name="persistenceUnitName" value="jpaTutos" />
    		<property name="dataSource" ref="dataSource" />
    		<property name="jpaVendorAdapter">
    			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    				<property name="database" value="MYSQL" />
    				<property name="showSql" value="true" />
    			</bean>
    		</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/restaurant" />
    		<property name="username" value="root" />
    		<property name="password" value="" />
    	</bean>
     
    	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    		<property name="entityManagerFactory" ref="entityManagerFactory" />
    	</bean>
     
    	<!--
    		Indique a Spring que les transactions sont geree par @Transactional
    	-->
    	<tx:annotation-driven transaction-manager="transactionManager" />
     
    	<!--
    		Indique a Spring que la configuration des beans se fait par
    		annotations
    	-->
    	<context:annotation-config />
    	<context:component-scan base-package="com.myshop" />
     
     
     
    </beans>

  2. #2
    Membre actif Avatar de MaitreKaio
    Profil pro
    Freelance Java / Web / Mobile
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance Java / Web / Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Points : 240
    Points
    240
    Par défaut
    org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: com.myshop.domain.plate.Plat; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: com.myshop.domain.plate.Plat at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:651)
    Autrement dit, tu dois être en train de vouloir enregistrer une entité détachée du gestionnaire de persistence. Il te faudrait plutôt la réattacher en faisant un merge, et non un persist
    J'ai des questions à toutes vos réponses (Woody Allen)
    Mon entreprise: http://qi2-software.fr
    Mon blog Java: http://torrefacteurjava.fr
    Mon blog Pas Java: http://bloq.qi2-software.fr

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    En modifiant persist par merge jobtiens la requete SQL suivante
    jpaTemplate.merge(t); voir la log ci dessous

    Ce que je souhaiterais c'est inserer mon Objet de Donnée entier Plat dans la base (Insert INTO ... ) d'ou mon code initiale jpaTemplate.persist(plat);
    Comment Faire ? Quelqu'un parait il maider ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    2010-09-21 17:41:10.133::INFO:  Started SelectChannelConnector@0.0.0.0:8080
    [INFO] Started Jetty Server
    [INFO] Starting scanner at interval of 10 seconds.
    Hibernate: select plat0_.id as id0_0_, plat0_.Description as Descript2_0_0_, plat0_.NomPlat as NomPlat0_0_, plat0_.Type as Type0_0_ from restaurant.plat plat0_ where plat0_.id=?
    Mon fichier de persistence.xml dans /META-INF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
        <persistence-unit name="jpaTutos" transaction-type="RESOURCE_LOCAL">
            <provider>org.hibernate.ejb.HibernatePersistence</provider>
             <class>com.myshop.domain.plate.Plat</class>
            <properties>
                    <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
                    <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/restaurant" />
                    <property name="hibernate.connection.username" value="root" />
                    <property name="show_sql" value="true" />
            		<property name="dialect" value="org.hibernate.dialect.MySQLDialect" />
            </properties>
     
        </persistence-unit>
     
    </persistence>

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Autrement dit, tu dois être en train de vouloir enregistrer une entité détachée du gestionnaire de persistence. Il te faudrait plutôt la réattacher en faisant un merge, et non un persist

    jai refait le test en jpaTemplate.merge() à la place de persit
    les données ne sont pas insérés en base de donnée ...
    Comment insérer mon en base ?

  5. #5
    Membre actif Avatar de MaitreKaio
    Profil pro
    Freelance Java / Web / Mobile
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance Java / Web / Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Points : 240
    Points
    240
    Par défaut
    Explique nous ton scénario stp.
    Tu as une IHM dans laquelle tu crées un nouveau plat, tu modifies un plat existant, ... ?
    J'ai des questions à toutes vos réponses (Woody Allen)
    Mon entreprise: http://qi2-software.fr
    Mon blog Java: http://torrefacteurjava.fr
    Mon blog Pas Java: http://bloq.qi2-software.fr

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    jai un formualire pour créer un objet plat que je souhaite ensuite insérer en Base :

    Presentation => Controller=>Service=>DAO


    Probleme ca explose dans ma couche DAO je comprends pas pourquoi ??
    Quelq'un peut maider ?

    public void persist(T t) {
    jpaTemplate.persist(t);
    }


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <form:form modelAttribute="plat" action="plat" method="post">
                  <fieldset>        
                    <legend>Plat Fields</legend>
                    <p>
                        <form:label    for="NomPlat" path="NomPlat" cssErrorClass="error">Nom du plat</form:label><br/>
                        <form:input path="NomPlat" /> <form:errors path="NomPlat" />            
                    </p>
                    <p>    
                        <form:label for="Description" path="Description" cssErrorClass="error">Description </form:label><br/>
                        <form:input path="Description" /> <form:errors path="Description" />
                    </p>
                    <p>
                        <form:label for="Type" path="Type" cssErrorClass="error">Type </form:label><br/>
                        <form:input path="Type" /> <form:errors path="Type" />
                    </p>
     
                    <p>    
                        <input type="submit" />
                    </p>
                </fieldset>
            </form:form>


    je recuperre ces données dans mon Controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    package com.myshop.controller.plate;
     
    import java.util.Map;
    import java.util.concurrent.ConcurrentHashMap;
     
    import javax.validation.Valid;
     
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.validation.BindingResult;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
     
    import com.myshop.controller.account.ResourceNotFoundException;
    import com.myshop.service.plate.IPlateService;
     
    @Controller
    @RequestMapping(value="/plat")
    public class PlatController {
     
    	private Map<Integer, Plat> plats = new ConcurrentHashMap<Integer, Plat>();
     
    	@Autowired
    	@Qualifier("platService")
    	private IPlateService mPlatService;
     
     
    	@RequestMapping(method=RequestMethod.GET)
    	public String getCreateForm(Model model) {
    		model.addAttribute(new Plat());
    		return "plat/createForm";
    	}
     
    	@RequestMapping(method=RequestMethod.POST)
    	public String create(@Valid com.myshop.domain.plate.Plat plat, BindingResult result) {
    		if (result.hasErrors()) {
    			return "plat/createForm";
    		}
     
    		this.plats.put(plat.assignId(), plat);
    		mPlatService.persist(plat);
    		return "redirect:/plat/" + plat.getId();
    	}
     
    	@RequestMapping(value="{id}", method=RequestMethod.GET)
    	public String getView(@PathVariable Long id, Model model) {
    		Plat plat = this.plats.get(id);
    		if (plat == null) {
    			throw new ResourceNotFoundException(id);
    		}
    		model.addAttribute(plat);
    		return "plat/view";
    	}
     
    }
    Couche Service
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     
    @Service("platService")
    @Transactional(propagation = Propagation.REQUIRED, readOnly = true)
    public class PlatService implements IPlateService{
     
     
    	@Autowired
    	private IPlatHome mPlatDao;
     
    	public Plat findById(Integer id) {
    		return mPlatDao.findById(id);
    	}
     
    	public Plat merge(Plat detachedInstance) {
    		return mPlatDao.merge(detachedInstance);
    	}
     
    	public void persist(Plat transientInstance) {
    		mPlatDao.persist(transientInstance);
    	}
     
    	public void remove(Plat persistentInstance) {
    		mPlatDao.remove(persistentInstance);
    	}
     
    }

    couche DAO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    
    
    public abstract class AbstractDAO<T>  {
            
            private Class<T> entityClass;
            
            protected JpaTemplate jpaTemplate;
    
            protected Class<T> getEntityClass() {
                    return entityClass;
            }
            
            @PersistenceUnit
            public void setEntityManagerFactory(EntityManagerFactory emf) {
                    this.jpaTemplate = new JpaTemplate(emf);
            }
    
            @SuppressWarnings("unchecked")
            public AbstractDAO(Class<T> entityClass) {
                    this.entityClass = entityClass;
            }
            
         
    
            @SuppressWarnings("unchecked")
            public Collection<T> getAll() {
                    return jpaTemplate.find("from " + entityClass.getSimpleName());
            }
    
            public void persist(T t) {
        		jpaTemplate.persist(t);
        	}
            
            public T getById(Long id) {
                    return jpaTemplate.find(entityClass, id);
            }
            
            public void remove(T t) {
                    jpaTemplate.remove(t);          
            }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    @Repository
    public class PlatHome extends AbstractDAO<Plat> implements IPlatHome {
     
    	private static final Log log = LogFactory.getLog(PlatHome.class);
     
     
    	public PlatHome(){
    		super(Plat.class);
    	}
    }

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut
    Désolé de déterrer le sujet, mais j'ai exactement le même problème !
    Comme je vois "sujet résolu" mais sans réponse, quelqu'un aurait-il l’amabilité de m'éclaircir sur la réponse ?

    Merci d'avance.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Hibernate] Detached entity passed to persist
    Par lotfi-g dans le forum Hibernate
    Réponses: 2
    Dernier message: 27/04/2018, 16h30
  2. Réponses: 0
    Dernier message: 12/08/2011, 13h28
  3. Réponses: 9
    Dernier message: 09/05/2011, 21h25
  4. Réponses: 1
    Dernier message: 14/07/2009, 00h24
  5. [EJB3 Entity] detached entity passed to persist
    Par maysam dans le forum Java EE
    Réponses: 3
    Dernier message: 03/12/2008, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo