2015-08-26 91 views
0

由於某種原因,當試圖使用findByEmail方法初始化存儲庫時,我得到BeanCreationException。不知道原因是什麼,實體中的字段與查詢中的參數相對應,並且在調度程序servlet中掃描包。春季 - 無法在CrudRepository中創建自定義查詢

PersonRepository.java

import java.util.List; 

import org.springframework.data.repository.CrudRepository; 
import org.springframework.stereotype.Repository; 

import wymysl.model.Person; 

@Repository 
public interface PersonRepository extends CrudRepository<Person, Long> { 

    public List<Person> findByEmail(String Email); 

} 

Person.java

@Entity 
@Table(name = "Persons") 
public class Person { 

    @Id 
    @GeneratedValue(strategy=GenerationType.SEQUENCE) 
    protected Integer id_per; 

    @NotNull 
    @Size(min=2, max=30) 
    protected String Name; 

    @NotNull 
    @Size(min=2, max=30) 
    protected String Surname; 

    @NotNull 
    @Email 
    protected String Email; 

    protected String Contact_email; 

    protected String Gender; 

    protected String City; 

    protected String Country; 

    protected String Additional; 

    @NotNull 
    @Size(min=6, max=15) 
    protected String Password; 

    @Transient 
    @NotNull 
    @Size(min=6, max=15) 
    protected String checkPassword; 


    public Person(){ 

    } 

    public Person(String name, String surname, String email, String password) { 
     this.Name = name; 
     this.Surname = surname; 
     this.Email = email; 
     this.Password = password; 
    } 


    public Integer getId_per() { 
     return id_per; 
    } 
    public void setId_per(Integer id_per) { 
     this.id_per = id_per; 
    } 
    public String getName() { 
     return Name; 
    } 
    public void setName(String name) { 
     this.Name = name; 
    } 
    public String getSurname() { 
     return Surname; 
    } 
    public void setSurname(String surname) { 
     this.Surname = surname; 
    } 
    public String getEmail() { 
     return Email; 
    } 
    public void setEmail(String email) { 
     this.Email = email; 
    } 
    public String getContact_email() { 
     return Contact_email; 
    } 
    public void setContact_email(String contact_email) { 
     this.Contact_email = contact_email; 
    } 
    public String getGender() { 
     return Gender; 
    } 
    public void setGender(String gender) { 
     this.Gender = gender; 
    } 
    public String getCity() { 
     return City; 
    } 
    public void setCity(String city) { 
     this.City = city; 
    } 
    public String getCountry() { 
     return Country; 
    } 
    public void setCountry(String country) { 
     this.Country = country; 
    } 
    public String getAdditional() { 
     return Additional; 
    } 
    public void setAdditional(String additional) { 
     this.Additional = additional; 
    } 
    public String getPassword() { 
     return Password; 
    } 
    public void setPassword(String password) { 
     this.Password = password; 
    } 

    public String getCheckPassword() { 
     return checkPassword; 
    } 

    public void setCheckPassword(String checkPassword) { 
     this.checkPassword = checkPassword; 
    } 

} 

PersonValidator.java

import java.util.List; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.validation.Errors; 
import org.springframework.validation.Validator; 

import wymysl.model.Person; 
import wymysl.repositories.PersonRepository; 

public class PersonValidator implements Validator { 

    @Autowired 
    PersonRepository repo; 

    public boolean supports(Class<?> classz) { 
     // TODO Auto-generated method stub 
     return Person.class.equals(classz); 
    } 

    public void validate(Object target, Errors errors) { 

     Person person = (Person) target; 

     if(!(person.getPassword().equals(person.getCheckPassword()))){ 
      errors.rejectValue("Password", "password.nonequal"); 
     } 

     List<Person> emailCheck = repo.findByEmail(person.getEmail()); 

     if(!emailCheck.isEmpty()) { 
      errors.rejectValue("Email", "email.exist"); 
     } 

     repo.save(person); 

    } 

} 

錯誤的完整的跟蹤:

Could not create query metamodel for method public abstract java.util.List wymysl.repositories.PersonRepository.findByEmail(java.lang.String)! 
+0

添加堆棧跟蹤請。 – Jens

+0

@Jens是忘了它。它現在被添加 –

+0

該列表不能擁有抽象對象的下級框架需要澄清列表類型。 –

回答

1

我覺得你離開了查詢批註過你的資料庫接口的方法::的

@Query 
public List<Person> findByEmail(String Email); 
+0

我在spring-data的任何地方都沒有看到這個註釋,也沒有在文檔中提到http://docs.spring.io/spring-data/data-commons/docs/current/reference/html/#repositories – zapl

+0

註解是絕對有: –

+0

啊,你說得對,有http://www.petrikainulainen.net/programming/spring-framework/spring-data-jpa-tutorial-creating-database-queries-with-the-query-annotation/- 一個只有spring-data-jpa的註釋(這就是爲什麼我沒有找到它,nosql ftw:p),並允許你指定自定義的sql查詢(你不這樣做,也許加入這會更糟? ) – zapl