![](/img/trans.png)
[英]Hibernate : org.hibernate.QueryParameterException: could not locate named parameter
[英]org.hibernate.QueryParameterException: could not locate named parameter
我的項目設置是 MySQL DB 上的 Spring MVC、Hibernate 3.2.x
收到以下錯誤:
org.hibernate.QueryParameterException:找不到命名參數 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]
用戶帳戶 class:
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;
}
}
從我記憶中,這是Hibernate報告錯誤錯誤消息的情況。 我猜,實際的錯誤是“找不到com.cmgr.beans.UserAccount的映射”。 試試這個查詢:
String hql = "from com.cmgr.beans.UserAccount";
這可能會顯示正確的錯誤消息。 一旦你修復了它,你可以改變它以接受參數。
今天我遇到了類似的問題......我的實體不在Spring的掃描包中。 所以Hibernate以某種方式做了一些事情,但錯誤信息非常令人困惑,並不真正適合真正的問題。 要解決我的問題,我必須將實體添加到packagescan中。
將您的查詢更改為
String hql = "from com.cmgr.beans.UserAccount u where u.Email = :email";
由於您的UserAccount類具有Email
屬性
Hibernate somewhy會拋出不同於它的異常。可能通過糾正這個你應該擺脫問題:
我看到在UserAccount類中,電子郵件地址的屬性被定義為“電子郵件”而不是“電子郵件”。 請參閱hibernate文檔
建議使用java命名約定,因此我建議您在UserAccount中將您的屬性命名為“email”。
試試吧......
代替
List<UserAccount> result = currentSession().createQuery(hql)
.setParameter("email", email)
.list();
使用
List<UserAccount> result = currentSession().createQuery(hql)
.setString("email", email)
.list();
可能它會幫助你......
更換:
@Autowired
@Column(name = "email")
private String Email;
//
有:
@Autowired
private String email;
使用java命名約定變量命名小寫字母而不需要寫
@Column(name = "email")
因為變量名與列名相同
驗證 SQL 查詢中的參數是否以“:”開頭
示例: WHERE NAME =:pMyParameter
同時,您必須考慮到在 Java 代碼中參數不能以':'命名
示例: parameters.put("pMyParameter", myParameter);
也許它會幫助你...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.