Bonjour à tous,

Je débute en JPA, je travaille avec toplink sous NetBeans 6.1 dans un projet java

J'ai deux Classe Vente et client reliées par la relation many to one: dans la classe vente l'atribut refclient est de type classe Client.

Je veux faire une recherche sur le champs client, j''ai utilisé la requete suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
  Client client = findClient(T1.getText());
  query = "SELECT v FROM Vente v where v.refClient = " + client;
j'ai obtenu le message d'erreur suivant :

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
 
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager
        at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:707)
        at Frames.Consultation.OKActionPerformed(Consultation.java:341)
        at Frames.Consultation.access$400(Consultation.java:25)
        at Frames.Consultation$5.actionPerformed(Consultation.java:113)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6041)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5806)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4413)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4243)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
        at java.awt.Container.dispatchEventImpl(Container.java:2102)
        at java.awt.Window.dispatchEventImpl(Window.java:2440)
        at java.awt.Component.dispatchEvent(Component.java:4243)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Caused by: Exception [EclipseLink-8034] (Eclipse Persistence Services - 1.0 (Build SNAPSHOT - 20080422)): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Error compiling the query [SELECT v FROM vente v where v.refclient=1234]. Unknown abstract schema type [vente].
        at org.eclipse.persistence.exceptions.JPQLException.unknownAbstractSchemaType(JPQLException.java:470)
        at org.eclipse.persistence.internal.jpa.parsing.ParseTreeContext.classForSchemaName(ParseTreeContext.java:138)
        at org.eclipse.persistence.internal.jpa.parsing.SelectNode.getClassOfFirstVariable(SelectNode.java:312)
        at org.eclipse.persistence.internal.jpa.parsing.SelectNode.getReferenceClass(SelectNode.java:301)
        at org.eclipse.persistence.internal.jpa.parsing.ParseTree.getReferenceClass(ParseTree.java:439)
        at org.eclipse.persistence.internal.jpa.parsing.ParseTree.adjustReferenceClassForQuery(ParseTree.java:79)
        at org.eclipse.persistence.internal.jpa.parsing.JPQLParseTree.populateReadQueryInternal(JPQLParseTree.java:103)
        at org.eclipse.persistence.internal.jpa.parsing.JPQLParseTree.populateQuery(JPQLParseTree.java:84)
        at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:207)
        at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:170)
        at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:134)
        at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:95)
        at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:80)
        at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:705)
RQ: j'ai remarqué lors de la génération des Classes de mapping Vente, toplink engendre les requêtes qu'on peut utilisé sur tous les attributs sauf pour l'attribut refClient qui est de type Classe Client

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
@NamedQuery(name = "Vente.findByCodevente", query = "SELECT v FROM Vente v WHERE v.codevente = :codevente"),
@NamedQuery(name = "Vente.findByDatevente", query = "SELECT v FROM Vente v WHERE v.datevente = :datevente"),
@NamedQuery(name = "Vente.findByMontantPayer", query = "SELECT v FROM Vente v WHERE v.montantPayer = :montantPayer"), @NamedQuery(name = "Vente.findByMontantnPayer", query = "SELECT v FROM Vente v WHERE v.montantnPayer = :montantnPayer"), @NamedQuery(name = "Vente.findByModePayment", query = "SELECT v FROM Vente v WHERE v.modePayment = :modePayment"), @NamedQuery(name = "Vente.findByNumbonSortie", query = "SELECT v FROM Vente v WHERE v.numbonSortie = :numbonSortie")})
Je comprends pas pourquoi



Si quelqu'un peut m'eclairssir un peu les choses je serais vraiment reconnaissante