访问由valueof(0)初始化的BigDecimal时获取java.lang.NoSuchMethodError

访问由valueof(0)初始化的BigDecimal时获取java.lang.NoSuchMethodError,java,spring-boot,nosuchmethoderror,Java,Spring Boot,Nosuchmethoderror,我有一个类User,带有BigDecimal字段,它是私有的,我试图通过getter访问它 但当我试图获得平衡时,我没有得到这样的错误 @Service public class PaymentProcessor { @Autowired UserDaoService userDao; public void withdrawFunds(String payerId, double amount){ User payer = userDao.getBy

我有一个类
User
,带有BigDecimal字段,它是私有的,我试图通过getter访问它

但当我试图获得平衡时,我没有得到这样的错误

@Service
public class PaymentProcessor {

    @Autowired
    UserDaoService userDao;

    public void withdrawFunds(String payerId, double amount){
        User payer = userDao.getByUserName(payerId);
        if ( payer.getBalance().doubleValue()   // I get Error here
                < amount){
            throw new RuntimeException("Insufficient Funds");
        }
        else {
            payer.updateBalance(BigDecimal.valueOf(amount * (-1)));
            userDao.saveUser(payer);
        }
    }

}
@服务
公共类付费处理器{
@自动连线
userDao服务userDao;
公共资金无效提取(字符串payerId,双倍金额){
用户payer=userDao.getByUserName(payerId);
if(payer.getBalance().doubleValue()//我在这里得到错误
<金额){
抛出新的RuntimeException(“资金不足”);
}
否则{
付款人更新平衡(BigDecimal.valueOf(金额*(-1));
userDao.saveUser(付款人);
}
}
}
添加了编辑用户类


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

    @Id
    private String username;
    private String email;
    private String name;
    private String password;
    private BigDecimal balance;
    private String personalInfo;
    private int rating;
    @ManyToMany(cascade = {
            CascadeType.PERSIST,
            CascadeType.MERGE,
    }, fetch = FetchType.EAGER)
    @JoinTable(name = "user_role",
            joinColumns = @JoinColumn(name = "username"),
            inverseJoinColumns = @JoinColumn(name = "role_id")
    )
    private Set<UserRole> userRoles = new HashSet<>();

    public User() {
        userRoles.add(new UserRole("default"));
        this.rating = 0;
        this.balance = BigDecimal.valueOf(0);
    }

    public void updateBalance(BigDecimal balance) {
        this.balance = this.balance.add(balance);
    }

    public BigDecimal getBalance() {
        return balance;
    }

@实体
@表(name=“users”)
公共类用户{
@身份证
私有字符串用户名;
私人字符串电子邮件;
私有字符串名称;
私有字符串密码;
私人十进制余额;
私人字符串个人信息;
私人内部评级;
@许多(级联={
cascade type.PERSIST,
CascadeType.MERGE,
},fetch=FetchType.EAGER)
@JoinTable(name=“user\u role”,
joinColumns=@JoinColumn(name=“username”),
inverseJoinColumns=@JoinColumn(name=“role\u id”)
)
private Set userRoles=new HashSet();
公共用户(){
添加(新用户角色(“默认”);
这一等级=0;
this.balance=BigDecimal.valueOf(0);
}
公共无效更新平衡(BigDecimal余额){
this.balance=this.balance.add(balance);
}
公共BigDecimal getBalance(){
收益余额;
}

将私有变量更改为:
private BigDecimal balance=BigDecimal.ZERO;

发生错误的原因是,在这一行中,
User payer=userDao.getByUserName(payerId);
,您正在从
用户
调用默认构造函数,该用户的
余额
为空值

public class User() {
  super()
  .....
  this.balance = null;
  ....
}

将私有变量更改为:
private BigDecimal balance=BigDecimal.ZERO;

发生错误的原因是,在这一行中,
User payer=userDao.getByUserName(payerId);
,您正在从
用户
调用默认构造函数,该用户的
余额
为空值

public class User() {
  super()
  .....
  this.balance = null;
  ....
}

您可以发布您的用户类吗?使用
BigDecimal.ZERO
而不是
BigDecimal.valueOf(0)
您可以发布您的用户类吗?使用
BigDecimal.ZERO
而不是
BigDecimal.valueOf(0)