Получение java .lang.NoSuchMethodError при доступе к BigDecimal, инициализированному valueof (0) - PullRequest
1 голос
/ 29 апреля 2020

У меня есть класс User с полем BigDecimal, оно закрытое, и я пытаюсь получить к нему доступ через геттер.

Но когда я пытаюсь получить доступ к балансу, я получаю NoSuchMethodError

@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);
        }
    }

}

РЕДАКТИРОВАТЬ ПОЛЬЗОВАТЕЛЬСКИЙ КЛАСС ДОБАВЛЕНО


@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;
    }

1 Ответ

0 голосов
/ 29 апреля 2020

Измените свою личную переменную на: private BigDecimal balance = BigDecimal.ZERO;

Ошибка происходит, потому что в этой строке User payer = userDao.getByUserName(payerId); вы вызываете конструктор по умолчанию из User, в котором balance имеет нулевое значение

public class User() {
  super()
  .....
  this.balance = null;
  ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...