Erreur de syntaxe analyse JPQL: identification de la variable doit être prévu pour une gamme de déclaration de variable
Lorsque vous essayez d'exécuter ce code:
List<Users> list = em.createQuery("select balance b from Users where b.userName = '" + user_name.getText() +"'", Users.class).getResultList();
Je rencontre ce message d'erreur:
Erreur de syntaxe analyse [select solde b from Users where b.nom d'utilisateur = 'a'].
[28, 28] L'identification de la variable doit être prévu pour une gamme de déclaration de variable.
Je veux récupérer l'Entier de l'équilibre de l'Utilisateur dont le nom est tapé dans la user_name TextField.
Je suis tout à fait un débutant sur ce sujet et de l'internet donne compliqué info. Quelqu'un peut-il svp m'expliquer quel est le problème ?
Partie de la classe Users
@Entity
@Table(name = "users")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Users.findAll", query = "SELECT u FROM Users u"),
@NamedQuery(name = "Users.findByUserName", query = "SELECT u FROM Users u WHERE u.userName = :userName"),
@NamedQuery(name = "Users.findByBalance", query = "SELECT u FROM Users u WHERE u.balance = :balance"),
@NamedQuery(name = "Users.findByFirstName", query = "SELECT u FROM Users u WHERE u.firstName = :firstName"),
@NamedQuery(name = "Users.findByLastName", query = "SELECT u FROM Users u WHERE u.lastName = :lastName"),
@NamedQuery(name = "Users.findByIban", query = "SELECT u FROM Users u WHERE u.iban = :iban"),
@NamedQuery(name = "Users.findByCharacterSlots", query = "SELECT u FROM Users u WHERE u.characterSlots = :characterSlots"),
@NamedQuery(name = "Users.findByLastPayment", query = "SELECT u FROM Users u WHERE u.lastPayment = :lastPayment"),
@NamedQuery(name = "Users.findByMonthsPayed", query = "SELECT u FROM Users u WHERE u.monthsPayed = :monthsPayed"),
@NamedQuery(name = "Users.findByPassword", query = "SELECT u FROM Users u WHERE u.password = :password"),
@NamedQuery(name = "Users.findByBanned", query = "SELECT u FROM Users u WHERE u.banned = :banned")})
public class Users implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "user_name")
private String userName;
@Column(name = "balance")
private Integer balance;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "iban")
private String iban;
@Column(name = "character_slots")
private Integer characterSlots;
@Column(name = "last_payment")
@Temporal(TemporalType.DATE)
private Date lastPayment;
@Column(name = "months_payed")
private Integer monthsPayed;
@Column(name = "password")
private String password;
@Column(name = "banned")
private Boolean banned;
@ManyToMany(mappedBy = "usersCollection")
private Collection<Servers> serversCollection;
@ManyToMany(mappedBy = "usersCollection")
private Collection<Characters> charactersCollection;
public Users() {
}
public Users(String userName, Integer balance, String firstName, String lastName, String iban, Integer characterSlots, Date lastPayment, Integer monthsPayed, String password, Boolean banned) {
this.userName = userName;
this.balance = balance;
this.firstName = firstName;
this.lastName = lastName;
this.iban = iban;
this.characterSlots = characterSlots;
this.lastPayment = lastPayment;
this.monthsPayed = monthsPayed;
this.password = password;
this.banned = banned;
}
- Qu'est-ce que l'équilibre dans la relation avec les Utilisateurs: la requête s'attend à une Liste d'Utilisateurs, tandis que le select est la spécification de l'équilibre. Ne devrait-il pas être quelque chose comme "Select b des Utilisateurs u joindre u.solde b où b.nom d'utilisateur"a"?
- J'ai édité la question à montrer certains de l'Users.java
- Votre requête est toujours faux, car il doit être basé sur les Utilisateurs de l'entité. Qu'est-ce que l'équilibre, et pourquoi l'aurait-il un nom d'utilisateur?
- il a maintenant été édité
Vous devez vous connecter pour publier un commentaire.
Vous devez déclarer une identification de la variable lors de l'interrogation à l'encontre des Utilisateurs de l'entité. Vous vous interrogez à l'encontre des Utilisateurs de l'entité, par conséquent, la déclaration de la variable doit être de l'Utilisateur et non sur l'équilibre de la propriété.
Aussi, vous souhaitez récupérer le solde de la propriété des Utilisateurs de l'entité qui est de type Integer. Par conséquent, l'utilisation de médicaments génériques doit indiquer correctement le type correct.
Essayez ceci:
Sinon, si seulement un seul résultat qui est attendu:
Une application plus correcte pour éviter les attaques par injection SQL consiste à utiliser une requête paramétrée:
Essayer: