Как исправить "не удалось лениво инициализировать коллекцию ролей" " - PullRequest
0 голосов
/ 13 февраля 2020

Я знаю, что этот вопрос задавали и отвечали много раз прежде, однако я не видел решения для контекста, в котором у меня есть эта ошибка. У меня есть две коллекции в моем классе сущностей, и когда я пытаюсь добавить к ним объект с помощью метода в классе обслуживания, я сталкиваюсь с ошибкой:

@ Entity publi c класс Account {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "account_id", nullable = false, updatable = false, unique = true)
private long accountId;

@Column(name = "account_no", nullable = false, updatable = false, unique = true)
private String accountNumber;

@Column(name = "account_balance")
private double accountBalance;

@OneToMany(mappedBy = "account", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Stocks> stocksList;

@OneToMany(mappedBy = "account", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Transaction> transactionList;

@ Service publi c класс TransactionServiceImpl реализует TransactionService {

@Autowired
private TransactionDao transDao;
@Autowired
private AccountServiceImpl accountService;
@Autowired
private StockServiceImpl stockService;

@Override
public Transaction findByTransactionId(long transactionId) {
    return transDao.findByTransactionId(transactionId);
}

@Override
public Transaction createPurchaseTransaction(Stocks s, Account a, long volume) {
    Transaction t = new Transaction();
    double balance = a.getAccountBalance();
    double totalCost = volume * s.getSharePrice();
    if (totalCost > balance){
        System.out.println("No Funds");
    } else{
        t.setPrice(totalCost);
        t.setVolume(volume);
        double balanceAfterDeduction = balance - totalCost;
        long volumeAfterDeduction = s.getVolume() - volume;
        a.setAccountBalance(balanceAfterDeduction);
        s.setVolume(volumeAfterDeduction);
        **a.getStocksList().add(s);
        a.getTransactionList().add(t);**
        accountService.save(a);
        transDao.save(t);
        stockService.save(s);
        accountService.save(a);

    }
    return t;
}

Выполнение моего теста для этого метода возвращает следующую ошибку:

InitializationException: не удалось лениво инициализировать коллекцию роли Account.stockList, не удалось инициализировать сеанс прокси-сервера.

Я попытался изменить тип выборки на EAGER для обеих коллекций и пробовал одну как EAGER с другой LAZY. Кажется, ничего не работает.

...