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é
InformationsquelleAutor user3660293 | 2015-10-05