Разница между @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. Что моя решена.