13

私のプロジェクト設定は、MySQLDB上のSpringMVC、Hibernate3.2.xです。

次のエラーが発生します。

org.hibernate.QueryParameterException:名前付きパラメーターの電子メールを見つけることができませんでした

アプローチ#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:パラメータemailは、[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;
    }
}
4

7 に答える 7

21

私の記憶では、これは Hibernate が間違ったエラー メッセージを報告するケースです。おそらく、実際のエラーは「com.cmgr.beans.UserAccount のマッピングが見つかりません」です。このクエリを試してください:

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

これにより、おそらく正しいエラー メッセージが表示されます。それを修正したら、パラメーターを受け入れるように変更できます。

于 2012-10-26T10:04:36.500 に答える
3

今日、私は同様の問題を抱えていました... 私のエンティティは、Spring からスキャンされたパッケージに含まれていませんでした。そのため、Hibernate は何らかの処理を行いましたが、エラー メッセージは非常に紛らわしく、実際の問題には当てはまりませんでした。私の問題を解決するには、パッケージスキャンにエンティティを追加する必要がありました。

于 2014-05-12T12:12:24.477 に答える
2

クエリを次のように変更します

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

UserAccount クラスには次のプロパティがあるため、Email

于 2012-10-26T12:44:25.287 に答える
1

UserAccount クラスで、電子メール アドレスのプロパティが「email」ではなく「Email」として定義されていることがわかります。休止状態のドキュメントを参照してください

Java 命名規則を使用することをお勧めします。そのため、UserAccount でプロパティに「email」という名前を付けることをお勧めします。

于 2012-09-19T04:55:12.840 に答える
1

Hibernate は何らかの理由で、本来あるべき例外とは異なる例外をスローします。おそらくこれを修正することで、問題を取り除くことができます:

  • JavaConventions に従うようにクラス内のフィールドの名前を変更します (小文字で始める必要があります)。
  • 完全修飾の代わりに単純なクラス名を使用する
于 2012-09-15T04:31:37.897 に答える
0

これを試してみてください....

代わりに

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

使用する

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

それはあなたを助けるかもしれません....

于 2012-09-18T13:30:36.893 に答える