Bonjour,

J'aimerais pouvoir modifier la valeur d'une entité liée, qui dans le cas présent se nomme "Chauffeur".

Dans le premier cas j'ai créé le champ avec une valeur null :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 reservation.setChauffeur(null);
Mais lorsque je veux modifier la valeur, un message d'erreur s'affiche.
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
 public class Reservation implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID_RESV")
    private Integer idResv;
    @Column(name = "DateResv")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dateResv;
    @Column(name = "destination")
    private String destination;
    @Column(name = "objetResv")
    private String objetResv;
    @Column(name = "DATE_DEBUT")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dateDebut;
    @Column(name = "DATE_FIN")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dateFin;
@JoinColumn(name = "NumSOM", referencedColumnName = "NUM_SOM")
    @ManyToOne
    private Chauffeur chauffeur;
 
//////////////
Voici le code de modification :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
  public void ConfirmerReservation(Integer id,Integer IdChau,String conf) throws IllegalStateException{
 
        Query q=em.createQuery("UPDATE Reservation e SET "
                + "e.confirmation=:conf,"
                + "e.chauffeur.numSom=:IdChau WHERE e.idResv = :id");
                q.setParameter("conf", conf);
                q.setParameter("IdChau", IdChau);
                q.setParameter("id", id);
                int updated = q.executeUpdate();
   }
Et le message d'erreur:
Caused by: java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager:
Exception Description: Error compiling the query [UPDATE Reservation e SET e.confirmation=:conf,e.chauffeur.numSom=:IdChau WHERE e.idResv = :id], line 1, column 48: invalid navigation expression [e.chauffeur], cannot navigate association field [chauffeur] in the SET clause target.
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1328)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.createQuery(EntityManagerWrapper.java:425)
at DAO.IDAO.ConfirmerReservation(IDAO.java:1182)
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.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1056)
at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1128)
at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5292)
at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:615)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:567)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:157)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:139)
at sun.reflect.GeneratedMethodAccessor2532.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:858)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797)
at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:367)
at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5264)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5252)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:190)
... 43 more
Caused by: Exception [EclipseLink-8033] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Error compiling the query [UPDATE Reservation e SET e.confirmation=:conf,e.chauffeur.numSom=:IdChau WHERE e.idResv = :id], line 1, column 48: invalid navigation expression [e.chauffeur], cannot navigate association field [chauffeur] in the SET clause target.
at org.eclipse.persistence.exceptions.JPQLException.invalidSetClauseNavigation(JPQLException.java:446)
at org.eclipse.persistence.internal.jpa.parsing.EqualsAssignmentNode.validateNavigation(EqualsAssignmentNode.java:62)
at org.eclipse.persistence.internal.jpa.parsing.EqualsAssignmentNode.validateTarget(EqualsAssignmentNode.java:44)
at org.eclipse.persistence.internal.jpa.parsing.EqualsAssignmentNode.validate(EqualsAssignmentNode.java:31)
at org.eclipse.persistence.internal.jpa.parsing.SetNode.validate(SetNode.java:67)
at org.eclipse.persistence.internal.jpa.parsing.ParseTree.validate(ParseTree.java:208)
at org.eclipse.persistence.internal.jpa.parsing.ParseTree.validate(ParseTree.java:187)
at org.eclipse.persistence.internal.jpa.parsing.ParseTree.validate(ParseTree.java:177)
at org.eclipse.persistence.internal.jpa.parsing.JPQLParseTree.populateModifyQueryInternal(JPQLParseTree.java:146)
at org.eclipse.persistence.internal.jpa.parsing.JPQLParseTree.populateQuery(JPQLParseTree.java:88)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:202)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:173)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:125)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:109)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1326)
... 66 more
Quelqu'un saurait-il m'expliquer d'où peut venir le problème ?

Merci d'avance pour votre aide.