簡體   English   中英

為什么我不能在Spring Boot中將@Entity用戶及其UserRepository保存

[英]Why can't I save my @Entity User with it's UserRepository in Spring Boot

問題

調用repository.save(user); 其中repositoryUserRepository的實例,而user.toStringUser[id=0, userName='asd', password='asd'] ,我的控制器給出以下錯誤:

nested exception is java.lang.IllegalArgumentException: Invoked method public abstract java.lang.Object org.springframework.data.repository.CrudRepository.save(java.lang.Object) is no accessor method!] with root cause

java.lang.IllegalArgumentException: Invoked method public abstract java.lang.Object org.springframework.data.repository.CrudRepository.save(java.lang.Object) is no accessor method!

細節

我知道repository.save(new User("user1", "pass1")); 之所以有效,是因為我使用以下方法測試了我的存儲庫:

public CommandLineRunner demo(UserRepository repository) {
        return (args) -> {
                // save a couple of users
                repository.save(new User("user1", "pass1"));
                repository.save(new User("user2", "pass2"));
                }
}

這是頁面的完整請求映射:

RequestMapping(value = "/register", method = RequestMethod.GET)
public String showRegistrationForm(WebRequest request, Model model) {
        User user = new User();
        model.addAttribute("user", user);
        return "registrations/register";
}

@RequestMapping(value = "/register", method = RequestMethod.POST)
public String registerUserAccount(WebRequest request,
                                        @ModelAttribute("user") @Valid User user,
                                        BindingResult result,
                                        UserRepository repository) {
        if (!result.hasErrors()) {

          System.out.println(user);
                repository.save(user);
        }
        return "redirect:/";

}

這是UserRepository:

import java.util.List;

import org.springframework.data.repository.CrudRepository;

public interface UserRepository extends CrudRepository<User, Long> {

    List<User> findByUserName(String UserName);
}

這是用戶@Entity:

@Entity
public class User {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;
    private String userName;
    private String password;

    protected User() {}

    public User(String userName, String password) {
        this.userName = userName;
        this.password = password;
    }

    // standard getters and setters

    @Override
    public String toString() {
        return String.format(
                "User[id=%d, userName='%s', password='%s']",
                id, userName, password);
    }

}

似乎不應該將Controller代碼中的UserRepository repository用作參數:...

public String registerUserAccount(WebRequest request,
                                        @ModelAttribute("user") @Valid User user,
                                        BindingResult result,
                                        UserRepository repository)

...

您可以像這樣使用@Autowired嗎?

@Autowired 
 private UserRepository repository;

然后重試?!

希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM