Erreur: la valeur de Paramètre ne correspond pas au type attendu
Je suis en train de récupérer un UTILISATEUR à partir de ma base de données à l'aide de l'ID dans la clause where. Cependant, je reçois un message d'erreur et mon programme est un échec.
C'est l'erreur que je reçois lorsque j'exécute mon programme:
ERROR [org.jboss.as.ejb3.invocation] (default task-19)
JBAS014134: EJB Invocation failed on component CustomerServiceBeanImpl
for method public abstract package.name.entity.ICustomer
package.name.bean.CustomerServiceBean.getCustomerById(long):
javax.ejb.EJBException: java.lang.IllegalArgumentException:
Parameter value [19533] did not match expected type [package.name.entity.User (n/a)]
Note: [19533] est un test de valeur que j'ai utilisé.
C'est la méthode qui est d'avoir l'erreur dans le CustomerServiceBeanImpl.java:
@Override
public Customer getCustomerById (final long id)
{
return Customer.getById (this.em, id);
}
C'est la méthode qui est appelée par le composant CustomerServiceBeanImpl:
public static Customer getById (final EntityManager em, final long id)
{
for (final Customer c : em.createNamedQuery ("Customer.getById", Customer.class)
.setParameter ("id", id).setMaxResults (1).getResultList ())
{
return c;
}
return null;
}
La requête de nom est-ce:
@NamedQuery (name = "Customer.getById",
query = "SELECT o FROM gnf.Customer o WHERE o.user = :id")
Dans le Customer.java la classe elle-même la colonne est celui-ci:
@ManyToOne (fetch = FetchType.LAZY)
@JoinColumn (name = "user_id")
private User user;
Faire une vérification rapide de ma disquette de réparation d'urgence le "id" de la colonne de mon tableau "clients" a un type de données BIGINT. Cependant, je ne suis pas sûr si ce qui compte. (Base de données PostgreSQL.)
Comment puis-je corriger cette erreur?
OriginalL'auteur CSLearner | 2016-05-20
Vous devez vous connecter pour publier un commentaire.
La clause where dans ta requête nommée semble être le problème. L'attribut de l'utilisateur dans votre Customer.class est de type d'Utilisateur et de votre requête s'attend à le trouver un type compatible pour longtemps.
...
Valeur du paramètre [19533] ne correspond pas au type attendu [package.nom.de l'entité.Utilisateur ...
Donc, si vous avez besoin de plus d'aide sur ce qu'il serait grand de voir l'ensemble des entités de l'Utilisateur et le Client.
En général, la requête est liée au nom de la classe (sensible à la casse) et les noms de propriétés de la classe Java, pas le nom de la table et de la table des noms de colonne. Quand il y a un tableau contenant une clé étrangère causée par un
@OneToOne
relation ou quelque chose de similaire, le paramètre dans la requête doit se mettre à la objet, pas son id.OriginalL'auteur ptr
Il se passe parce que dans votre base de données, le paramètre sera un @oneToOne objet et que vous devez appeler l'id de l'intérieur de l'Objet, de sorte que vous avez à donner à la requête de la manière suivante :
", sélectionnez l'utilisateur à partir d'Utilisateur de l'utilisateur lorsque l'utilisateur.client.id=:param"
OriginalL'auteur Mac