2013-06-05 4 views
2

Grails 2.2.1LazyInitializationException в Grails

Мой простой домен:

class Article{ 
    SortedSet<Photo> photoGallery 

    //helper method 
    Photo getMainPhoto(){ 
     Photo mainPhoto = photoGallery.find{it.mainPhoto} 
     return mainPhoto 
    } 
} 

Один-ко-многим ФОТОГалерея скачиваются лениво

я вызвать метод getMainPhoto с точки зрения .gsp , Проблема в том, что иногда (не всегда) Я получаю ошибку LazyInitializationException при попытке получить основную фотографию из ленивой фотогалереи «один ко многим».

Почему это происходит иногда, а не каждый раз, когда я вызываю этот метод? Это нормально? И как я могу это исправить, не делая отношения с нетерпением?

Благодаря

ответ

0

Не уверен, но я использовал, чтобы получить ту же ошибку, когда я пытаюсь получить доступ к объекту, который вложенности объектов в будущем, так что иногда в параллельных исполнениях из-за ленивых, все вложенные объекты домена не получались, прежде чем использовать их.

Проблема может быть устранена путем доступа к тому же свойству на блоке, прежде чем использовать его в представлении.

так что если вы добавите оператор печати или что-то чуть ниже линии

Photo mainPhoto = photoGallery.find{it.mainPhoto} 

, то он должен загружаться.

Я не уверен, но я думаю, что если вы добавите его, как таким образом:

Photo mainPhoto = photoGallery.find{it.mainPhoto} 
println("mainPhoto=${mainPhoto}") 

, то он должен оказывать на странице GSP.

0

Код, который вы указали, как вы определяете свой класс домена, Article? Можете ли вы использовать такие вещи, как SortedSet? Я думал, что вы должны использовать hasMany во всех ситуациях «один-ко-многим», если вы хотите, чтобы Grails правильно все обрабатывал.

Еще одна вещь, которая может помочь: посмотрите, есть ли Article сгенерированный с помощью метода помощника, что-то вроде getPhotoGallery. То есть, не просто ссылайтесь непосредственно на photoGallery.

Если это поможет, сообщите нам об этом. Я смущен.

Смежные вопросы