не удалось лениво инициализировать коллекцию ролей, только когда sysout не используется - PullRequest
0 голосов
/ 29 июня 2018

Я заметил странную проблему. Я получаю это исключение:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.javacms.entity.Article.comments, could not initialize proxy - no Session

С этим кодом:

@Override
@Transactional
public List<Comment> getCommentsFromArticle(int articleId) {
    Article article = getArticle(articleId);
    System.out.println(article);
    List<Comment> comments = article.getComments();
    //System.out.println(comments);
    return comments;
}

Но когда я удаляю комментарий из System.out.println (comments) и код выглядит так:

@Override
@Transactional
public List<Comment> getCommentsFromArticle(int articleId) {
    Article article = getArticle(articleId);
    System.out.println(article);
    List<Comment> comments = article.getComments();
    System.out.println(comments);
    return comments;
}

Код работает нормально, как я подозреваю. У кого-нибудь была такая же проблема. Я не понимаю, почему возникает ошибка, когда я не использую sysout.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Когда вы вызываете article.getComments (), hibernate вернет объект прокси. Если вы не выполните какую-либо операцию над комментариями, hibernate не будет инициализировать ее. Когда вы вызываете system.println для комментариев, toString () вызывается для объекта, hibernate узнает, что вы выполняете операцию над этим объектом, поэтому он будет инициализировать ее во время выполнения транзакции. Вы можете явно вызвать hibernate.initialize (комментарии). Это будет нормально работать

0 голосов
/ 29 июня 2018

Благодаря JB Nizet я удалил ошибку. Теперь код выглядит так:

@Override
@Transactional
public List<Comment> getCommentsFromArticle(int articleId) {
    List<Comment> comments = new ArrayList<>(getArticle(articleId).getComments());
    return comments;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...