Je veux insérer des données dans une table en utilisant le code suivant
public User registerUser(String usr, String pwd) {
u=em.find(User.class,usr);
if(u!=null)
{
return null;
}
String query1 = "insert into users values('" + usr + "','" + pwd +"')";
Query q = em.createQuery(query1);
u=em.find(User.class,usr);
return u;
}
ici 'u
'est l'objet de User
classe et em
est EntityManager
.
Je reçois cette exception suivante:
Servlet.service () pour l'action de servlet a renvoyé une exception org.hibernate.hql.ast.QuerySyntaxException: attente de OPEN, 'valeurs' trouvées près de la ligne 1, colonne 19 [insérer dans les valeurs utilisateur ('pawan', 'am')]
Essayer
public User registerUser(String usr, String pwd) {
u=em.find(User.class,usr);
if(u!=null)
{
return null;
}
//Now saving...
em.getTransaction().begin();
em.persist(u); //em.merge(u); for updates
em.getTransaction().commit();
em.close();
return u;
}
Si la PK est Identity, elle sera automatiquement définie dans votre classe persistante, si vous utilisez la stratégie de génération automatique (grâce à David Victor).
Modifier à @aman_novice commentaire: Le définir dans votre classe
//Do this BEFORE getTransaction/persist/commit
//Set names are just a example, change it to your class setters
u.setUsr(usr);
u.setPwd(pwd);
//Now you can persist or merge it, as i said in the first example
em.getTransaction().begin();
(...)
À propos de @ David Victor, désolé j'ai oublié à ce sujet.
Vous n'utilisez pas SQL mais JPAQL, il n'y a pas d'insertion basée sur les champs. Vous persistez objet plutôt que d'insérer des lignes.
Vous devriez faire quelque chose comme ça:
public User registerUser(String usr, String pwd) {
u=em.find(User.class,usr);
if(u!=null)
{
return u;
}
u = new User(usr, pwd);
em.persist(u);
return u;
}
Ce n'est pas vraiment la voie à suivre. Vous essayez d'insérer une ligne dans une table mais aucune entité attachée n'est associée. Si vous utilisez le gestionnaire d'entités JPA - créez ensuite une nouvelle instance - définissez les propriétés et conservez l'entité.
Par exemple.
User u = new User();
u.setXXX(xx);
em.persist(u);
// em.flush() <<-- Not required, useful for seeing what is happening
// etc..
Si vous activez la journalisation SQL dans Hibernate et purgez l'entité, vous verrez ce qui est envoyé à la base de données.
Par exemple. dans persistence.xml:
<property name="hibernate.format_sql" value="true" />