Разница между @LazyCollection (LazyCollectionOption.FALSE) и @OneToMany (fetch = FetchType.ЖАЖДУЩИЙ)
у меня есть сомнения по поводу "ленивой загрузки".
В чем разница между использованием @LazyCollection(LazyCollectionOption.FALSE)
и @OneToMany(fetch = FetchType.EAGER)
?
Im мое приложение я использую два списка, но если я использую в этом формате:
@OneToMany(mappedBy = "consultaSQL", orphanRemoval = true, fetch = FetchType.EAGER,
cascade = CascadeType.ALL)
private List<ParametroSQL> parametros;
@OneToMany(mappedBy = "consulta", orphanRemoval = true, fetch = FetchType.EAGER,
cascade = CascadeType.ALL)
private List<Contato> contatos;
у меня есть эта ошибка:
вызвано: org.зимовать.погрузчик.MultipleBagFetchException: невозможно одновременно получить несколько пакетов
Я знаю, если это происходит, потому что спящий режим не позволяет мне загружать два списка одновременно время. Но если я использую этот формат:
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "consultaSQL", orphanRemoval = true,
cascade = CascadeType.ALL)
private List<ParametroSQL> parametros;
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "consulta", orphanRemoval = true,
cascade = CascadeType.ALL)
private List<Contato> contatos;
отлично работать.
извините за мой английский спасибо
3 ответов
принципиальное различие между аннотациями заключается в том, что @OneToMany
и его параметры (например,fetch = FetchType.EAGER
) является чистым JPA. Его можно использовать с любым провайдером JPA, таким как Hibernate или EclipseLink.
@LazyCollection
С другой стороны, Hibernate специфичен и, очевидно, работает только в том случае, если используется Hibernate.
Если возможно, попробуйте придерживаться спецификации JPA как можно больше. Сделав это, вы сможете легко переключить провайдера (по крайней мере, в теория.)
Что касается вашей реальной проблемы, может быть, вы используете версию Hibernate, которая не поддерживает JPA 2.0 как этой ответ напрашивается?
Я думаю, что у меня эта же проблема...
примерьте все коллекции...
@Fetch(FetchMode.SUBSELECT)
Он должен устранить ошибки
Как предложено в этом посте : https://stackoverflow.com/a/5865605/5619076 Изменение списка по набору должно решить MultipleBagFetchException. Что моя решена.