找不到类型为User的属性findOne() [英] No property findOne() found for type class User

查看:1549
本文介绍了找不到类型为User的属性findOne()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经搜索了很多页面,但没有找到答案,所以我粘贴了整个代码。我正在测试testclass并得到如下错误:由org.springframework.beans.factory.BeanCreationException引起的错误: userRepository':调用init方法失败;嵌套异常是java.lang.IllegalArgumentException:无法为方法创建查询public abstract org.home.mysystem.entity.User org.home.mysystem.repository.UserRepository.findOne(java.lang .String)!找不到类型为User的属性findOne!。请有人帮助我



Role.java

  package org.home .mysystem.entity; 

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;

@Entity
公共类角色{

@Id
私人字符串名称;
@ManyToMany(mappedBy =roles)
private List< User>用户;

public String getName(){
return name;
}

public void setName(String name){
this.name = name;
}

公共列表<用户> getUsers(){
返回用户;
}

public void setUsers(List< user> users){
this.users = users;
}

public Role(String name,List< User> users){
this.name = name;
this.users = users;

$ b public public(){
}

public Role(String name){
this.name = name;
}

}

Task.java

  package org.home.mysystem.entity; 

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

import org.hibernate.validator.constraints.NotEmpty;

@Entity
公共类任务{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
私有长ID;
@NotEmpty
私人字符串日期;
@NotEmpty
private String startTime;
@NotEmpty
private String stopTime;
@NotEmpty
@Column(长度= 1000)
私有字符串描述;
@ManyToOne
@JoinColumn(name =USER_EMAIL)
私人用户用户;

public Long getId(){
return id;
}
public void setId(Long id){
this.id = id;
}
public String getDate(){
return date;
}
public void setDate(String date){
this.date = date;
}
public String getStartTime(){
return startTime;
}
public void setStartTime(String startTime){
this.startTime = startTime;
}
public String getStopTime(){
return stopTime;
}
public void setStopTime(String stopTime){
this.stopTime = stopTime;
}
public String getDescription(){
return description;
}
public void setDescription(String description){
this.description = description;
}
public User getUser(){
return user;
}
public void setUser(User user){
this.user = user;

public Task(String date,String startTime,String stopTime,String description,User user){
this.date = date;
this.startTime = startTime;
this.stopTime = stopTime;
this.description = description;
this.user = user;
}
public Task(String date,String startTime,String stopTime,String description){
this.date = date;
this.startTime = startTime;
this.stopTime = stopTime;
this.description = description;

public Task(){
}


$ b}

User.java

  package org.home.mysystem.entity ; 

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.validation.constraints.Size;

导入org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;

@Entity
public class User {

@Id
@Email
@NotEmpty
@Column(unique = true )
私人字符串电子邮件;
@NotEmpty
私人字符串名称;
@Size(min = 4)
私人字符串密码;
@OneToMany(mappedBy =user,cascade = CascadeType.ALL)
private List< Task>任务;

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name =USER_ROLES,joinColumns = {
@JoinColumn(name =USER_EMAIL,referencedColumnName =email )},inverseJoinColumns = {
@JoinColumn(name =ROLE_NAME,referencedColumnName =name)})
private List< Role>角色;

public String getEmail(){
return email;
}

public void setEmail(String email){
this.email = email;
}

public String getName(){
return name;
}

public void setName(String name){
this.name = name;
}

public String getPassword(){
return password;
}

public void setPassword(String password){
this.password = password;
}

公共列表< Task> gettasks(){
返回任务;
}

public void settasks(List< Task> tasks){
this.tasks = tasks;
}

public List< Role> getRoles(){
返回角色;
}

public void setRoles(List< Role> roles){
this.roles = roles;
}

public User(String email,String name,String password){
this.email = email;
this.name = name;
this.password =密码;


public User(){

}

}

RoleRepository.java

  package org.home.mysystem.repository ; 

导入org.home.mysystem.entity.Role;
import org.springframework.data.jpa.repository.JpaRepository;

public interface RoleRepository扩展JpaRepository< Role,String> {

}

TaskRepository.java

  public interface TaskRepository扩展了JpaRepository< Task,Long> {

列表< Task> findByUser(用户用户);




$ b UserRepository.java

  package org.home.mysystem.repository; 

导入org.home.mysystem.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository扩展JpaRepository< User,String> {

用户findOne(最终字符串电子邮件);


$ / code>

TaskService.java

  package org.home.mysystem.service; 

import java.util.ArrayList;
import java.util.List;

导入org.home.mysystem.entity.Role;
导入org.home.mysystem.entity.Task;
导入org.home.mysystem.entity.User;
导入org.home.mysystem.repository.TaskRepository;
import org.home.mysystem.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;



@Service
公共类TaskService {
$ b $ @Autowired
私有TaskRepository taskRepository;

public void addTask(Task task,User user){
task.setUser(user);
taskRepository.save(task);
}

公共列表< Task> findUserTask(用户用户){

返回taskRepository.findByUser(user);
}
}

UserService.java

  import java.util.ArrayList; 
import java.util.List;

导入org.home.mysystem.entity.Role;
导入org.home.mysystem.entity.User;
import org.home.mysystem.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;



@Service
public class UserService {

@Autowired
private UserRepository userRepository;

public void createUser(User user){
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
user.setPassword(encoder.encode(user.getPassword()));
角色userRole =新角色(USER);
列表<角色> roles = new ArrayList<>();
roles.add(userRole);
user.setRoles(roles);
userRepository.save(user);
}

public void createAdmin(User user){
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
user.setPassword(encoder.encode(user.getPassword()));
角色userRole =新角色(ADMIN);
列表<角色> roles = new ArrayList<>();
roles.add(userRole);
user.setRoles(roles);
userRepository.save(user);
}

public User findOne(String email){
return userRepository.findOne(email);


$ / code>

MyApplicationTest.java

  package org.home.mysystem; 

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.util.List;

导入org.home.mysystem.entity.Task;
导入org.home.mysystem.entity.User;
导入org.home.mysystem.service.TaskService;
import org.home.mysystem.service.UserService;
导入org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class MySystemApplicationTests {
$ b $ @Autowired $ b $ private UserService userService;

@Autowired
私人TaskService taskService;

@Before
public void initDb(){
{
User newUser = new User(testUser@mail.com,testUser,123456 );
userService.createUser(newUser);
}
{
User newUser = new User(testAdmin@mail.com,testAdmin,123456);
userService.createUser(newUser);


任务userTask =新任务(03/01/2018,00:11,11:00,今天你需要工作);
User user = userService.findOne(testUser@mail.com);
taskService.addTask(userTask,user);


$ b @Test
public void testUser(){
User user = userService.findOne(testUser@mail.com);
assertNotNull(user);
User admin = userService.findOne(testAdmin@mail.com);
assertEquals(admin.getEmail(),testAdmin@mail.com);
}

@Test
public void testTask(){
User user = userService.findOne(testUser@mail.com);
列表<任务>任务= taskService.findUserTask(用户);
assertNotNull(task);
}

}


解决方案


$ b

findOne 默认为默认值定义为通过一个ID(主键)来加载实体。所以它需要一个 long Long (据我所知)。它采用给定参数(email)的名称,并且正在搜索具有该名称的ID并且根本不会相加。



如果您想通过搜索电子邮件或其他字段已由您定义,您需要使用以下语法:



示例1



搜索范例字段: email



存储库中的方法:
用户findByEmail(字符串电子邮件)



示例2



通过以下方式搜索的示例字段:用户名



存储库中的方法:
用户findByUsername(字符串用户名)



我希望这有助于!


I have searched many pages but didnt found the answer so i paste the whole code.I am testing the testclass and getting the error like "Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract org.home.mysystem.entity.User org.home.mysystem.repository.UserRepository.findOne(java.lang.String)! No property findOne found for type User!". Please someone help me

Role.java

package org.home.mysystem.entity;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;

@Entity
public class Role {

    @Id
    private String name;
    @ManyToMany(mappedBy = "roles")
    private List<User> users;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }

    public Role(String name, List<User> users) {
        this.name = name;
        this.users = users;
    }

    public Role() {
    }

    public Role(String name) {
        this.name = name;
    }

}

Task.java

package org.home.mysystem.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

import org.hibernate.validator.constraints.NotEmpty;

@Entity
public class Task {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @NotEmpty
    private String date;
    @NotEmpty
    private String startTime;
    @NotEmpty
    private String stopTime;
    @NotEmpty
    @Column(length=1000)
    private String description;
    @ManyToOne
    @JoinColumn(name="USER_EMAIL")
    private User user;

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
    public String getStartTime() {
        return startTime;
    }
    public void setStartTime(String startTime) {
        this.startTime = startTime;
    }
    public String getStopTime() {
        return stopTime;
    }
    public void setStopTime(String stopTime) {
        this.stopTime = stopTime;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    public Task(String date, String startTime, String stopTime, String description, User user) {
        this.date = date;
        this.startTime = startTime;
        this.stopTime = stopTime;
        this.description = description;
        this.user = user;
    }
    public Task(String date, String startTime, String stopTime, String description) {
        this.date = date;
        this.startTime = startTime;
        this.stopTime = stopTime;
        this.description = description;
    }
    public Task() {
    }



}

User.java

package org.home.mysystem.entity;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;

@Entity
public class User {

    @Id
    @Email
    @NotEmpty
    @Column(unique = true)
    private String email;
    @NotEmpty
    private String name;
    @Size(min = 4)
    private String password;
    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    private List<Task> tasks;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "USER_ROLES", joinColumns={
            @JoinColumn(name = "USER_EMAIL", referencedColumnName = "email") }, inverseJoinColumns = {
                    @JoinColumn(name = "ROLE_NAME", referencedColumnName = "name") })
    private List<Role> roles;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public List<Task> gettasks() {
        return tasks;
    }

    public void settasks(List<Task> tasks) {
        this.tasks = tasks;
    }

    public List<Role> getRoles() {
        return roles;
    }

    public void setRoles(List<Role> roles) {
        this.roles = roles;
    }

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

    public User() {

    }

}

RoleRepository.java

    package org.home.mysystem.repository;

    import org.home.mysystem.entity.Role;
    import org.springframework.data.jpa.repository.JpaRepository;

    public interface RoleRepository extends JpaRepository<Role, String> {

    }

TaskRepository.java

 public interface TaskRepository extends JpaRepository<Task, Long> {

        List<Task> findByUser(User user);

    }

UserRepository.java

package org.home.mysystem.repository;

import org.home.mysystem.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User,String> {

    User findOne(final String email);

}

TaskService.java

 package org.home.mysystem.service;

    import java.util.ArrayList;
    import java.util.List;

    import org.home.mysystem.entity.Role;
    import org.home.mysystem.entity.Task;
    import org.home.mysystem.entity.User;
    import org.home.mysystem.repository.TaskRepository;
    import org.home.mysystem.repository.UserRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
    import org.springframework.stereotype.Service;



    @Service
    public class TaskService {

        @Autowired
        private TaskRepository taskRepository;

        public void addTask(Task task, User user) {
            task.setUser(user);
            taskRepository.save(task);
        }

        public List<Task>  findUserTask(User user){

            return taskRepository.findByUser(user);
        }
    }

UserService.java

import java.util.ArrayList;
import java.util.List;

import org.home.mysystem.entity.Role;
import org.home.mysystem.entity.User;
import org.home.mysystem.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;



@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public void createUser(User user) {
        BCryptPasswordEncoder encoder=new BCryptPasswordEncoder();
        user.setPassword(encoder.encode(user.getPassword()));
        Role userRole=new Role("USER");
        List<Role> roles=new ArrayList<>();
        roles.add(userRole);
        user.setRoles(roles);
        userRepository.save(user);
    }

    public void createAdmin(User user) {
        BCryptPasswordEncoder encoder=new BCryptPasswordEncoder();
        user.setPassword(encoder.encode(user.getPassword()));
        Role userRole=new Role("ADMIN");
        List<Role> roles=new ArrayList<>();
        roles.add(userRole);
        user.setRoles(roles);
        userRepository.save(user);
    }

    public User findOne(String email) {
        return userRepository.findOne(email);
    }
}

MyApplicationTest.java

package org.home.mysystem;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.util.List;

import org.home.mysystem.entity.Task;
import org.home.mysystem.entity.User;
import org.home.mysystem.service.TaskService;
import org.home.mysystem.service.UserService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class MySystemApplicationTests {

    @Autowired
    private UserService userService;

    @Autowired
    private TaskService taskService;

    @Before
    public void initDb() {
      {
          User newUser = new User("testUser@mail.com", "testUser", "123456");
          userService.createUser(newUser); 
      }
      {
          User newUser = new User("testAdmin@mail.com", "testAdmin", "123456");
          userService.createUser(newUser); 
      }

      Task userTask = new Task("03/01/2018", "00:11", "11:00", "You need to work today");
      User user = userService.findOne("testUser@mail.com");
      taskService.addTask(userTask, user);  

    }

    @Test
    public void testUser() {
        User user=userService.findOne("testUser@mail.com");
        assertNotNull(user);
        User admin=userService.findOne("testAdmin@mail.com");
        assertEquals(admin.getEmail(),"testAdmin@mail.com");
    }

    @Test
    public void testTask() {
        User user=userService.findOne("testUser@mail.com");
        List<Task> task=taskService.findUserTask(user);
        assertNotNull(task);
    }

    }

解决方案

The issue is that Spring is expecting something else as you are giving it.

findOne is by default defined to take an ID (primary key) to load the entity by. So it expects a long or Long (as far as I know). It takes the name of the parameter given (email) and is searching for an ID with that name and that simply doesn't add up.

If you want to search by an email or other field that has been defined by you, you need to use the following syntax:

Example 1

Example field to search by: email

Method in repository: User findByEmail(String email)

Example 2

Example field to search by: username

Method in repository: User findByUsername(String username)

I hope this helps!

这篇关于找不到类型为User的属性findOne()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆