简体   繁体   English

引起:java.lang.IllegalArgumentException: Entity must have id

[英]Caused by: java.lang.IllegalArgumentException: Entity must has id

I don't understand what kind of mysticism.搞不懂什么玄学。 This method located in class UserService:此方法位于 class UserService 中:

@Override
    public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
        User user = repository.getByEmail(email.toLowerCase());
        if (user == null) {
            throw new UsernameNotFoundException("User " + email + " isn't found");
        }
1.      AuthorizedUser authorizedUser = new AuthorizedUser(user);
2.      Objects.requireNonNull(authorizedUser);
3.      System.out.println(new AuthorizedUser(user) + " 1");
4.      int userId = authorizedUser.getId();
5.      return authorizedUser;
    }

Why does everything go smoothly in line 1-3, line 3 goes to the console:为什么go在第1-3行,第3行顺利进入控制台:

UserTo{id=100000, name='VadimUserAdmin', email='vadim@gmail.com'} 1

And in line 4, an exception is thrown:在第 4 行,抛出异常:

Caused by: java.lang.IllegalArgumentException: Entity must has id
    at org.springframework.util.Assert.notNull(Assert.java:201)
    at topjava.quest.HasId.id(HasId.java:14)
    at topjava.quest.AuthorizedUser.getId(AuthorizedUser.java:22)
    at topjava.quest.service.UserService.loadUserByUsername(UserService.java:64)

What should I do with this?我该怎么办?

spring.security.version - 5.6.2 spring.security.version - 5.6.2

hibernate.version - 5.6.5.Final hibernate.version - 5.6.5.Final

class AuthorizedUser: class 授权用户:

public class AuthorizedUser extends org.springframework.security.core.userdetails.User {

    @Serial
    private static final long serialVersionUID = 1L;

    private UserTo userTo;

    public AuthorizedUser(User user) {
        super(user.getEmail(), user.getPassword(), true, true, true, true, user.getRoleSet());
        setUserTo(Util.userAsTo(user));
    }

    public int getId() {
        return userTo.id();
    }

    public void setUserTo(UserTo userTo) {
        userTo.setPassword(null);
        this.userTo = userTo;
    }

    @Override
    public String toString() {
        return userTo.toString();
    }
}

class UserTo: class 用户至:

public class UserTo extends BaseTo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    @NotBlank
    @Size(min = 2, max = 100)
    @ApiModelProperty(example = "New name")
    private final String name;

    @Email
    @NotBlank
    @Size(max = 100)
    @ApiModelProperty(example = "newmame@gmail.com")
    private final String email;

    @NotBlank
    @Size(min = 6, max = 32)
    @ApiModelProperty(example = "newmame123")
    private String password;

    @ConstructorProperties({"id", "name", "email", "password"})
    public UserTo(Integer id, String name, String email, String password) {
        super(id);
        this.name = name;
        this.email = email;
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }

    public String getPassword() {
        return password;
    }

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

    @Override
    public String toString() {
        return "UserTo{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

class BaseTo: class 底座至:

public class BaseTo implements HasId {

    @ApiModelProperty(hidden = true)
    protected Integer id;

    public BaseTo() {
    }

    public BaseTo(Integer id) {
        this.id = id;
    }

    @Override
    public Integer getId() {
        return null;
    }

    @Override
    public void setId(Integer id) {
        this.id = id;
    }
}

class HasId: class HasId:

public interface HasId {
    Integer getId();
    void setId(Integer id);

    default boolean isNew() {
        return getId() == null;
    }

    default int id() {
        Assert.notNull(getId(), "Entity must has id");
        return getId();
    }
}

What I do wrong?我做错了什么?

when you call HasId.id, you call method getId() from BaseTo.class, than return null, change method getId(){ return this.id;}当您调用 HasId.id 时,您从 BaseTo.class 调用方法 getId(),而不是返回 null,更改方法 getId(){ return this.id;}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 引起:java.lang.IllegalArgumentException:不是实体: - Caused by: java.lang.IllegalArgumentException: Not an entity: 引起:java.lang.illegalArgumentException - Caused by: java.lang.illegalArgumentException 引起原因:java.lang.IllegalArgumentException:二进制XML文件第9行:必须指定唯一的android:id,android:tag或具有ID的父对象 - Caused by: java.lang.IllegalArgumentException: Binary XML file line #9: Must specify unique android:id, android:tag, or have a parent with an id for Junit 与 MockMVC - 错误 - java.lang.IllegalArgumentException:实体不能为空 - Junit with MockMVC - Error - java.lang.IllegalArgumentException: Entity must not be null 给定的 id 不能是 null;。 嵌套异常是 java.lang.IllegalArgumentException - The given id must not be null!; nested exception is java.lang.IllegalArgumentException 计时器计划由:java.lang.IllegalArgumentException - Timer schedule Caused by: java.lang.IllegalArgumentException 原因:java.lang.IllegalArgumentException:不是托管类型:&原因:org.hibernate.AnnotationException:未为实体指定标识符: - Caused by: java.lang.IllegalArgumentException: Not a managed type: & Caused by: org.hibernate.AnnotationException: No identifier specified for entity: java.lang.IllegalArgumentException:地图大小(0)必须> = 1 - java.lang.IllegalArgumentException: Map size (0) must be >= 1 java.lang.IllegalArgumentException:方法不能为null - java.lang.IllegalArgumentException: Method must not be null java.lang.IllegalArgumentException:上下文不得为null - java.lang.IllegalArgumentException: Context must not be null
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM