Spring Service - 我应该传递实体ID还是实体本身?

时间:2018-05-07 06:22:53

标签: java hibernate spring-mvc spring-data-jpa

我有一个User hibernate实体:

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column
    private String username;

    @Column
    private String password;

    // Getters and setters here
}

如果我想创建一个验证用户凭据的UserService方法,那么validate方法的设计应该是这样的:

public Boolean validate(Long userId, String username, String password)

或者像这样:

public Boolean validate(User user, String username, String password)

哪种设计会更好?谢谢你的时间

3 个答案:

答案 0 :(得分:1)

你的设计目标对我没有意义。 您在登录期间唯一需要usernamepassword的时间。 那时候, usernamepassword应唯一标识用户。

我相信你想要的方法是:

publid Optional<User> login(
    final String username,
    final String password);

然后返回包含Optional的{​​{1}}(由正确的用户名和密码组合标识)或返回User Optional以识别错误的组合用户名和密码。

答案 1 :(得分:0)

如果用户退出,我会使用给定的用户名,密码和数据库中的搜索来创建用户的实例。

伪代码:

public booelan validate(User user) {
    userService.findUser(user) != null;
}

您应该使用给定的用户名密码

创建用户的实例

User user = new User(userName, password);\\I am assuming username should be unique

然后在您的代码中使用:

if (isValidate(user)) {
    //doSomething();
}

答案 2 :(得分:0)

您只需在UserRepository中添加一个方法:

    User findByIdAndUsernameAndPassword(long id, String userName, String pass);

如果所有这些字段都与特定数据库条目匹配,则返回User。

传递entityId更好,我希望这可以满足您的要求。