2012-09-15 33 views
9

Mi configuración de proyecto son Spring MVC, Hibernate 3.2.x, en la base de datos MySQLorg.hibernate.QueryParameterException: No se pudo encontrar el nombre de parámetro

consiguiendo el error siguiente:

org.hibernate.QueryParameterException: could not locate named parameter email

Enfoque # 1:

@Override 
public Boolean isExist(String email) { 
    boolean flag = false; 
    String hql = "from com.cmgr.beans.UserAccount u where u.email = :email"; 
    List<UserAccount> result = currentSession().createQuery(hql) 
     .setParameter("email", email) 
     .list(); 

    UserAccount userAccount = (UserAccount)result.get(0); 
    if (userAccount!=null && userAccount.getEmail().equalsIgnoreCase(email)) { 
     flag = true; 
    } 

    return flag; 
} 

Enfoque # 2:

@Override 
    public Boolean isExist(String email) { 
     boolean flag = false; 
     String hql = "from com.cmgr.beans.UserAccount u where u.email = :email"; 
     List<UserAccount> result = currentSession().createQuery(hql).setString("email", email).list(); 

     UserAccount userAccount = (UserAccount) result.get(0); 
     if (userAccount != null && userAccount.getEmail().equalsIgnoreCase(email)) { 
      flag = true; 
     } 
     return flag; 
    } 

error:

java.lang.IllegalArgumentException: Parameter email does not exist as a named parameter in [from com.cmgr.beans.UserAccount u where u.email = :email]

clase UserAccount:

package com.cmgr.beans; 

import java.io.Serializable; 
import java.util.List; 
import java.util.Set; 
import javax.persistence.*; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Qualifier; 

@Entity 
@Table(name = "user_account") 
public class UserAccount implements Serializable { 

    @Autowired 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "user_account_seq") 
    @SequenceGenerator(name = "user_account_seq", sequenceName = "user_account_seq") 
    @Column(name = "user_id") 
    private Long UserId = null; 
    // 
    @Autowired 
    @Column(name = "user_name") 
    private String UserName; 
    // 
    @Autowired 
    @Column(name = "user_type") 
    private String UserType = null; 
    // 
    @Autowired 
    @Column(name = "first_name") 
    private String FirstName; 
    // 
    @Autowired 
    @Column(name = "last_name") 
    private String LastName; 
    // 
    @Autowired 
    @Column(name = "email") 
    private String Email; 
    // 
    @Autowired 
    @Column(name = "phone_contact_1") 
    private String PhoneContact1 = null; 
    // 
    @Autowired 
    @Column(name = "phone_contact_2") 
    private String PhoneContact2 = null; 
    //primary_address_is_usa 
    @Autowired 
    @Column(name = "primary_address_is_usa") 
    private Boolean primaryAddressIsUsa = null; 
    // 
    @Autowired 
    @Column(name = "address_1") 
    private String Address1 = null; 
    // 
    @Autowired 
    @Column(name = "city1") 
    private String city1 = null; 
    // 
    @Autowired 
    @Column(name = "state1") 
    private String state1 = null; 
    // 
    @Autowired 
    @Column(name = "country1") 
    private String country1 = null; 
    // 
    @Autowired 
    @Column(name = "zipcode") 
    private Integer zipcode = 0; 
    // 
    @Autowired 
    @Column(name = "Industry") 
    private String Industry = null; 
    //is the user account Active either due to user deactivation,admin deactivation, or nonpayment 
    @Autowired 
    @Column(name = "active") 
    private boolean Active = false; 
    //1 to 1 relation with registerationCode in Registeration class 
    @Autowired 
    @Qualifier("UserRegisteration") 
    @OneToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "Registeration_Code_fk", referencedColumnName = "registeration_code", nullable = false) 
    private UserRegisteration UserRegisteration; 
    //1 to many relation with EmailId in Email class 
    @OneToMany(cascade = {CascadeType.ALL}) 
    @JoinColumn(name = "emailed_id") 
    private List<Emailed> emailed = null; 
    //1 to many relation with signatureId in signature class 
    @OneToMany(cascade = {CascadeType.ALL}) 
    @JoinColumn(name = "signature_id") 
    private List<Signature> signatures; 
    //1 to many relation with UserAccountDocId in UserAccountDoc class 
    @OneToMany(cascade = {CascadeType.ALL}) 
    @JoinColumn(name = "user_doc_id") 
    private Set<UserAccountDocumentRelationship> UserAccountDocumentRelationship; 

    @Autowired(required = false) 
    public UserAccount() { 
    } 

    @Autowired(required = true) 
    public UserAccount(String UserName, String FirstName, String LastName, String Email, String Industry) { 
     this.FirstName = FirstName; 
     this.LastName = LastName; 
     this.Email = Email; 
     this.Industry = Industry; 
     this.UserName = UserName; 
    } 

    @Autowired(required = false) 
    public UserAccount(String UserName, Long UserId, String FirstName, String LastName, String Email, String Industry) { 
     this.UserId = UserId; 
     this.FirstName = FirstName; 
     this.LastName = LastName; 
     this.Email = Email; 
     this.Industry = Industry; 
     this.UserName = UserName; 
    } 

    public String getIndustry() { 
     return Industry; 
    } 

    public void setIndustry(String Industry) { 
     this.Industry = Industry; 
    } 

    public String getAddress1() { 
     return Address1; 
    } 

    public void setAddress1(String Address1) { 
     this.Address1 = Address1; 
    } 

    public String getPhoneContact1() { 
     return PhoneContact1; 
    } 

    public void setPhoneContact1(String PhoneContact1) { 
     this.PhoneContact1 = PhoneContact1; 
    } 

    public String getPhoneContact2() { 
     return PhoneContact2; 
    } 

    public void setPhoneContact2(String PhoneContact2) { 
     this.PhoneContact2 = PhoneContact2; 
    } 

    public boolean isActive() { 
     return Active; 
    } 

    public void setActive(boolean Active) { 
     this.Active = Active; 
    } 

    public String getEmail() { 
     return Email; 
    } 

    public void setEmail(String Email) { 
     this.Email = Email; 
    } 

    public String getFirstName() { 
     return FirstName; 
    } 

    public void setFirstName(String FirstName) { 
     this.FirstName = FirstName; 
    } 

    public String getLastName() { 
     return LastName; 
    } 

    public void setLastName(String LastName) { 
     this.LastName = LastName; 
    } 

    public com.cmgr.beans.UserRegisteration getUserRegisteration() { 
     return UserRegisteration; 
    } 

    public void setUserRegisteration(com.cmgr.beans.UserRegisteration UserRegisteration) { 
     this.UserRegisteration = UserRegisteration; 
    } 

    public Long getUserId() { 
     return UserId; 
    } 

    public void setUserId(Long UserId) { 
     this.UserId = UserId; 
    } 

    public String getUserType() { 
     return UserType; 
    } 

    public void setUserType(String UserType) { 
     this.UserType = UserType; 
    } 

    public List<Emailed> getEmailed() { 
     return emailed; 
    } 

    public void setEmailed(List<Emailed> emailed) { 
     this.emailed = emailed; 
    } 

    public List<Signature> getSignatures() { 
     return signatures; 
    } 

    public void setSignatures(List<Signature> signatures) { 
     this.signatures = signatures; 
    } 

    public String getCity1() { 
     return city1; 
    } 

    public void setCity1(String city1) { 
     this.city1 = city1; 
    } 

    public String getCountry1() { 
     return country1; 
    } 

    public void setCountry1(String country1) { 
     this.country1 = country1; 
    } 

    public Boolean getPrimaryAddressIsUsa() { 
     return primaryAddressIsUsa; 
    } 

    public void setPrimaryAddressIsUsa(Boolean primaryAddressIsUsa) { 
     this.primaryAddressIsUsa = primaryAddressIsUsa; 
    } 

    public String getState1() { 
     return state1; 
    } 

    public void setState1(String state1) { 
     this.state1 = state1; 
    } 

    public Integer getZipcode() { 
     return zipcode; 
    } 

    public void setZipcode(Integer zipcode) { 
     this.zipcode = zipcode; 
    } 

    public String getUserName() { 
     return UserName; 
    } 

    public void setUserName(String UserName) { 
     this.UserName = UserName; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if (obj == null) { 
      return false; 
     } 
     if (getClass() != obj.getClass()) { 
      return false; 
     } 
     final UserAccount other = (UserAccount) obj; 
     if ((this.UserId == null) ? (other.UserId != null) : !this.UserId.equals(other.UserId)) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 3; 
     hash = 73 * hash + (this.UserId != null ? this.UserId.hashCode() : 0); 
     return hash; 
    } 

    public Set<com.cmgr.beans.UserAccountDocumentRelationship> getUserAccountDocumentRelationship() { 
     return UserAccountDocumentRelationship; 
    } 

    public void setUserAccountDocumentRelationship(Set<com.cmgr.beans.UserAccountDocumentRelationship> UserAccountDocumentRelationship) { 
     this.UserAccountDocumentRelationship = UserAccountDocumentRelationship; 
    } 
} 

Respuesta

1

Hibernate somewhy lanza diferente excepción de lo que tiene que ser .. Probablemente corrigiendo este debe deshacerse del problema:

  • Cambiar el nombre de los campos de la clase para seguir JavaConventions (debe comenzar con una pequeña letra)
  • Usar cl simple Nombre culo en lugar de completo
0

acaba de tratar este ....

En lugar de

List<UserAccount> result = currentSession().createQuery(hql) 
.setParameter("email", email) 
.list(); 

uso

List<UserAccount> result = currentSession().createQuery(hql) 
.setString("email", email) 
.list(); 

puede ser que le ayuda a ...

1

Veo que en la clase UserAccount, la propiedad para la dirección de correo electrónico se define como 'Correo electrónico' y no 'correo electrónico'. Consulte hibernate documentation

Es aconsejable utilizar la convención de nomenclatura de Java por lo tanto, le aconsejaría que nombre su propiedad como 'correo electrónico' en Cuenta de usuario.

19

Por lo que recuerdo, este es un caso de Hibernate que informa el mensaje de error incorrecto. Supongo que el error real es "asignación no encontrada para com.cmgr.beans.UserAccount". Pruebe esta consulta:

String hql = "from com.cmgr.beans.UserAccount"; 

Esto probablemente le mostrará el mensaje de error correcto. Y una vez que arregle eso, puede cambiarlo para aceptar los parámetros.

2

cambiar la consulta a

String hql = "from com.cmgr.beans.UserAccount u where u.Email = :email"; 

Dado que la clase UserAccount tiene una propiedad de Email

3

Hoy he tenido un problema similar ... Mi entidad no estaba en los paquetes digitalizados desde la primavera. Entonces Hibernate de alguna manera hizo algo, pero el mensaje de error era bastante confuso y no encajaba realmente con el problema real. Para resolver mi problema, tuve que agregar las entidades al packagescan.

+0

También tuve el mismo problema: compruebe el archivo de registro a fondo y debería ver hibernate quejándose de que no ha encontrado un contexto de persistencia válido para el bean de entidad dado. –

0

reemplazar:

@Autowired 
    @Column(name = "email") 
    private String Email; 
    // 

con:

@Autowired 
private String email; 

convenciones uso Java Naming de denominación de variables de letras pequeñas & no necesitan escribir

@Column(name = "email") 

debido a nombre de la variable es igual nombre como nombre de columna

Cuestiones relacionadas