Bonjour,

J'utilise Glassfish 3.0.1 (EclipseLink pour la persistance). J'ai deux Entity :

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
 
Public class Produit implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @NotNull
    @Column(name = "idProduit")
    private Integer idProduit;
 
    @JoinColumn(name = "CAS", referencedColumnName = "CAS")
    @ManyToOne(optional = false)
    private Substance substance;
 
    ...
dans la table produit la colonne se nomme CAS

et

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
public class Substance implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 10)
    @Column(name = "CAS")
    private String cas;
 
...
J’exécute une requete JPQL suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
"SELECT p FROM Produit p WHERE (p.substance LIKE '%Bro%' OR p.nom LIKE '%Bro%' OR p.description LIKE '%Bro%' OR p.referenceFournisseur LIKE '%Bro%')"
et j'ai l'erreur suivante :

Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIKE '%50-%' OR t1.nom LIKE '%50-%') OR t1.description LIKE '%50-%') OR t1.refer' at line 1
Error Code: 1064
Call: SELECT t1.idProduit AS a1, t1.contenance AS a2, t1.ficheSecurite AS a3, t1.nom AS a4, t1.referenceFournisseur AS a5, t1.purete AS a6, t1.description AS a7, t1.idUniteMesure AS a8, t1.idConditionnement AS a9, t1.idEtatPhysique AS a10, t1.idFournisseur AS a11, t1.CAS AS a12 FROM substance t0, produit t1 WHERE (((? = ?) AND ((( LIKE ? OR t1.nom LIKE ?) OR t1.description LIKE ?) OR t1.referenceFournisseur LIKE ?)) AND (t0.CAS = t1.CAS)) LIMIT ?, ?
bind => [0, 0, %50-%, %50-%, %50-%, %50-%, 0, 9]

Si je ne me trompe pas, ce qui pose problème, c'est le ((( LIKE ? OR, il manque avant le LIKE : t1.CAS

Pourquoi EclipseLink ne "convertit" pas substance (variable de l'entity) en CAS (colonne de la BDD). Qu'ai-je oublié ?

Merci pour votre aide.

Cordialement

Geoffroy


Merci