Home > Software engineering >  I can't get an entity ID in spring boot
I can't get an entity ID in spring boot

Time:05-17

I am learning Spring-Boot and I'm doing a little project to practice, but I have a problem.

This is a simple authentication app, you can register and log in. My aim is: If you log in your username should be appeared, and for further functions I need the ID as well.

So I have this code:

@PostMapping("/main")
public String login(@ModelAttribute Users user, Model model) {
    time = sdf.format(new Date());
    Users correctUser = serv.selectUser(user.getName(), user.getPassword());
    if (correctUser != null) {

        //Users data
        login_name = user.getName();
        actual_user_id = user.getId();
        model.addAttribute("given_name", login_name);
        System.out.println("DEBUG: "   user);

        System.out.println(time   " Successful");
        return "main_screen";
    } else {
        System.out.println(time   " Log in failed");
        return "error_page";
    }
}

I can get and storage the name well in login_name, but with the ID I have some problems. As you can see I use user.getId() same as with name, but either way I get null and can't storage the ID in my actual_user_id variable.

Here is my repository:

@Repository
public interface UserRepository extends JpaRepository<Users, Integer> {
    Optional<Users> findFirstByName(String name);
    Optional<Users> findUserByNameAndPassword(String name, String password);
}

And my service method:

public Users authentication(String name, String password) {
    return repo.findUserByNameAndPassword(name, password).orElse(null);
}

EDIT: And this is my Users class

@Entity
@Table(name = "users")
public class Users {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String name;
    private String password;
    private String email;

    public Integer getId() {
        return id;
    }

    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 String getEmail() {
        return email;
    }

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

    @Override
    public String toString() {
        return "Users{"  
                "id="   id  
                ", name='"   name   '\''  
                ", passowrd='"   password   '\''  
                ", email='"   email   '\''  
                '}';
    }
}

I think it should work, but I can't find the problem. Can anyone help me? As I can see, I get the name and the password with the findUserByNameAndPassword() and nothing else, however I should I suppose.

CodePudding user response:

You look to be trying to get your id from the user passed to you in the post request:

actual_user_id = user.getId();

Try getting your information from the user you retrieved from the database:

actual_user_id = correctUser.getId();
  • Related