Les recherches continuent...
N'ayant pas de réponse, je suppose que la question est trop floue, ou mal formulée.
Pour ma part, j'ai compris pourquoi le caractère "?" n'était pas accecpté par la transaction. En fait, ce dernier n'est pas lu, mais interpreté comme positionneur d'un parametre dans la requete. Il sert aux requetes paramétrées. Dans mon cas, ce n'est pas une requête parametrée, c'est seulement une requete qui cherche a fixer une valeur de type varchar(255) dans un nouvel enregistrement par le biais d'un INSERT SQL tout ce qu'il y a de plus basique. Malheureusement, je ne trouve aucun moyen de faire comprendre à toplink, que dans ce cas, mon point d'interrogation ne doit pas être interpreté.
Petit exemple de code qui révèle le problème :
entityManager1 = java.beans.Beans.isDesignTime() ? null : javax.persistence.Persistence.createEntityManagerFactory("BibAdminPU").createEntityManager(); //BibAdminPU étant le fichier xml de persistence qui contient la définition de la connexion à ma base MySQL.
javax.persistence.Query requete = entityManager1.createNativeQuery("INSERT INTO table (champ1, champ2) VALUES (\"cuisine\", \"Avez-vous trouvé ça bon ?\");");
entityManager1.setFlushModeType(FlushModeType.COMMIT);
javax.persistence.EntityTransaction transaction = entityManager1.getTransaction();
transaction.begin();
requete.executeUpdate();
transaction.commit();
Fin du code exemple.
Lors de l'exécution de la ligne executeUpdate, j'obtient le message d'erreur :
Local Exception Stack:
Exception [TOPLINK-6132] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.QueryException
Exception Description: Query argument " not found in list of parameters provided during query execution.
Query: DataModifyQuery().........
En fait, le mécanisme d'exécution détecte le point d'interrogation comme positionneur de paramètre, qu'il appelle Query argument, mais aucun parametre n'est fourni dans la requete, d'où l'erreur...
Embêtant n'est-ce pas. d'autant que je ne trouve aucuns moyen d'éviter l'interpetation du "?".
J'ai alors orienté mes recherches vers un autre fournisseur de mécanisme de persistance, et mon attention c'est vue retenue par Hibernate.
J'ai donc ajouté le Plugin Hibernate à mon NetBeans, j'ai régénéré mes entités sur hibernate dans netbeans, et là, succès, le "?" n'est plus un problème, maintenant, c'es le caractère ":" qui passe pas....
Evidement, je vous le donne dans le mille, avec hibernate, le caractère de positionnement d'un parametre dans une requete, c'est le caractère ":".
Cependant, j'ai remarqué la chose suivante. Si je remplace la ligne 1 ci-dessous, par la ligne 2, ça marche avec hibernate :
ligne 1 : entityManager1.createNativeSuery("INSERT INTO table (champ1, champ2) VALUES (\"Santé\", \"Alcoolisme : il faut en parler!\");");
ligne 2 : entityManager1.createNativeSuery("INSERT INTO table (champ1, champ2) VALUES (\"Santé\", CONCAT(\"Alcoolisme \", \":\", \" il faut en parler!\"));");
Mais si je tiens le même résonnement, et que de retour avec TopLink je tente une concaténation du caractère "?", ça ne fonctionne pas, malgré l'enfermement du caractère dans une fonction, cet abrutit de toplink continue d'interpeter le caractère, et l'erreur se manifeste à nouveau.
Bref, ce serait bien si ça s'arrêtait là, il me suffirait de choisir hibernate, et de concaténer le ":", mais j'ai malheureusement la contrainte d'usage de Toplink qui m'est imposée et je ne peux y dérroger. Alors la question reste ouverte :
Si quelqu'un sait comment insérer une ligne dans une table Mysql comportant un champ de type varchar(255), une chaîne contenant le caractère "?" avec la technologie EJB-JPA et le fournisseur de persistence toplink-essential ???
Un grand merci à tous ceux qui se pancherons sur ce problème !