org.springframework.data.mapping.PropertyReferenceException:找不到类型User的属性更新

时间:2017-10-02 05:28:55

标签: java spring spring-boot spring-data-jpa

我使用小型Spring启动表单处理程序项目。 <script type="text/x-mathjax-config"> MathJax.Hub.Config({ tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]} }); </script> <p>\(x = {-b pm sqrt{b^2-4ac} over 2a}\) </p> entity位于下方,

User

提供了@Entity public class User { // form:hidden - hidden value @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Integer id; // form:input - textbox @Column(name = "name", columnDefinition = "VARCHAR(30)", nullable = false) String name; // form:input - textbox @Column(name = "email", columnDefinition = "VARCHAR(50)", nullable = false) String email; // form:textarea - textarea @Column(name = "address", columnDefinition = "VARCHAR(255)", nullable = true) String address; // form:input - password @Column(name = "password", columnDefinition = "VARCHAR(20)", nullable = false) String password; // form:input - password String confirmPassword; // form:checkbox - single checkbox @Column(name = "newsletter", nullable = true) boolean newsletter; // form:checkboxes - multiple checkboxes // @Column(columnDefinition = "VARCHAR(500)", nullable = false) @ElementCollection List<String> framework; // form:radiobutton - radio button @Column(name = "sex", columnDefinition = "VARCHAR(1)", nullable = true) String sex; // form:radiobuttons - radio button @Column(name = "number", nullable = true) Integer number; // form:select - form:option - dropdown - single select @Column(name = "", columnDefinition = "VARCHAR(10)", nullable = true) String country; // form:select - multiple=true - dropdown - multiple select // @Column(columnDefinition = "VARCHAR(500)", nullable = true) @ElementCollection List<String> skill; //Check if this is for New of Update public boolean isNew() { return (this.id == null); } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getConfirmPassword() { return confirmPassword; } public void setConfirmPassword(String confirmPassword) { this.confirmPassword = confirmPassword; } public boolean isNewsletter() { return newsletter; } public void setNewsletter(boolean newsletter) { this.newsletter = newsletter; } public List<String> getFramework() { return framework; } public void setFramework(List<String> framework) { this.framework = framework; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getNumber() { return number; } public void setNumber(Integer number) { this.number = number; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public List<String> getSkill() { return skill; } public void setSkill(List<String> skill) { this.skill = skill; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof User)) return false; User user = (User) o; if (isNewsletter() != user.isNewsletter()) return false; if (!getId().equals(user.getId())) return false; if (!getName().equals(user.getName())) return false; if (!getEmail().equals(user.getEmail())) return false; if (getAddress() != null ? !getAddress().equals(user.getAddress()) : user.getAddress() != null) return false; if (!getPassword().equals(user.getPassword())) return false; if (getConfirmPassword() != null ? !getConfirmPassword().equals(user.getConfirmPassword()) : user.getConfirmPassword() != null) return false; if (!getFramework().equals(user.getFramework())) return false; if (getSex() != null ? !getSex().equals(user.getSex()) : user.getSex() != null) return false; if (getNumber() != null ? !getNumber().equals(user.getNumber()) : user.getNumber() != null) return false; if (getCountry() != null ? !getCountry().equals(user.getCountry()) : user.getCountry() != null) return false; return getSkill() != null ? getSkill().equals(user.getSkill()) : user.getSkill() == null; } @Override public int hashCode() { int result = getId().hashCode(); result = 31 * result + getName().hashCode(); result = 31 * result + getEmail().hashCode(); result = 31 * result + (getAddress() != null ? getAddress().hashCode() : 0); result = 31 * result + getPassword().hashCode(); result = 31 * result + (getConfirmPassword() != null ? getConfirmPassword().hashCode() : 0); result = 31 * result + (isNewsletter() ? 1 : 0); result = 31 * result + getFramework().hashCode(); result = 31 * result + (getSex() != null ? getSex().hashCode() : 0); result = 31 * result + (getNumber() != null ? getNumber().hashCode() : 0); result = 31 * result + (getCountry() != null ? getCountry().hashCode() : 0); result = 31 * result + (getSkill() != null ? getSkill().hashCode() : 0); return result; } } 课程,

UserRepository

public interface UserRepository extends CrudRepository<User, Long> { User findById(Integer id); List<User> findAll(); void update(User user); // void delete(Integer id); } 目录中,还提供了界面和实现,

service

下面提供了该课程的实施,

public interface UserService {

    User findById(Integer id);

    List<User> findAll();

    void save(User user);

    void update(User user);

//    void delete(int id);
}

当我运行程序时,我收到错误

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    public User findById(Integer id) {
        return userRepository.findById(id);
    }

    public List<User> findAll() {
        return userRepository.findAll();
    }

    public void save(User user) {
        userRepository.save(user);
    }

    public void update(User user) {
        userRepository.update(user);
    }

//    public void delete(int id) {
//        userRepository.delete(id);
//    }
}

显然,这来自Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController': Unsatisfied dependency expressed through field 'userService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userServiceImpl': Unsatisfied dependency expressed through field 'userRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property update found for type User! 方法。我使用update数据库。如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

在Spring数据CRUD存储库中没有名为update的方法,它相当于保存。

如果新实体是新实体或合并现有实体,则

save方法负责持久保存新实体。

查看SimpleJpaRepository课程。这是片段:

@Transactional
public <S extends T> S save(S entity) {

    if (entityInformation.isNew(entity)) {
        em.persist(entity);
        return entity;
    } else {
        return em.merge(entity);
    }

}

如果您想在方法之上编写本机查询,请使用@Query

@Query('<<UPDATE QUERY>>')
update(..)

对代码共享的建议很少:

public interface UserRepository extends CrudRepository<User, Long> {


}

删除所有方法,因为已定义的方法已通过CrudRepository

提供
public interface CrudRepository<T, ID extends Serializable>
        extends Repository<T, ID> {

    <S extends T> S save(S entity); 

    T findOne(ID primaryKey);       

    Iterable<T> findAll();          

    Long count();                   

    void delete(T entity);          

    boolean exists(ID primaryKey);  

    // … more functionality omitted.
}