2012-09-15 36 views
9

我的項目設置是Spring MVC的,Hibernate的3.2.x中,對MySQL數據庫org.hibernate.QueryParameterException:無法找到名爲參數

得到以下錯誤:

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

方法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; 
} 

方法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; 
    } 

錯誤:

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

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; 
    } 
} 

回答

1

休眠somewhy拋出不同的異常比它必須是..可能通過糾正這一點,你應該擺脫的問題:

  • 重命名類中的字段以遵循JavaConventions(應以小寫字母開頭)
  • 使用簡單的cl屁股名稱,而不是完全限定
0

就試試這個....

在地方的

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

使用

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

可能它會幫助你... 。

1

我看到在UserAccount類中,屬性因爲電子郵件地址被定義爲「電子郵件」而不是「電子郵件」。 參考hibernate documentation

建議您使用java命名約定,因此我會建議您在UserAccount中將您的屬性命名爲'email'。

19

從我記得,這是一個Hibernate報告錯誤的錯誤信息。我想,實際的錯誤是「映射找不到com.cmgr.beans.UserAccount」。試試這個查詢:

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

這可能會告訴你正確的錯誤信息。一旦你解決了這個問題,你可以改變它來接受參數。

2

查詢更改爲

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

由於您的UserAccount類有我有一個類似的問題... 我的實體是不是在從春天掃描包Email

3

今天的屬性。所以Hibernate以某種方式做了一些事情,但錯誤信息相當混亂,並不適合真正的問題。 爲了解決我的問題,我不得不將實體添加到packagescan。

+0

我也遇到了同樣的問題 - 徹底檢查日誌文件,您應該看到hibernate抱怨它沒有爲給定的實體bean找到有效的持久化上下文! –

0

取代:

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

有:

@Autowired 
private String email; 

的變量命名小寫字母使用java命名約定&不需要寫

@Column(name = "email") 

因爲變量名是相同的名稱作爲列名

相關問題