LazyInitializationException в Hibernate Entity getter - PullRequest
1 голос
/ 29 марта 2012

Когда я выполняю Hibernate merge () для объекта ItemVersionLanguage, я получаю «ERROR [org.hibernate.LazyInitializationException] (pool-9-thread-1) не могу инициализировать прокси - нет Session: org.hibernate.LazyInitializationException:не удалось инициализировать прокси - нет Session "из приведенных ниже кодов.

Но когда я получаю данные из него, он отлично работает либо из ItemVersion, либо из URL ItemVersionLanguage.

У меня нет @Транзакционная упаковка кода, в котором находится merge ().

ItemVersionLanguage.java

@Entity
@Table(name = "item_version_language")
public class ItemVersionLanguage implements java.io.Serializable {
   private String url;
   private ItemVersion itemVersion;

   public void setUrl(String url)
   {
      this.url = url;
   } 
   @Column(name = "url")  
   public String getUrl()
   {
      if(this.url == null)
      {
          return this.itemVersion.url; //this results in the problem!
      }
      else
      {
          return this.url;
      }
   }
   public void setItemVersion(ItemVersion itemVersion)
   {
       this.itemVersion = itemVersion;
   }

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "item_version_obj_id", nullable = false)
   public ItemVersion getItemVersion()
   {
       return this.itemVersion;
   }
}

ItemVersion.java

@Entity
@Table(name = "item_version")
public class ItemVersion implements java.io.Serializable {
   private String url;

   public void setUrl(String url)
   {
      this.url = url;
   }   
   @Column(name = "url")
   public String getUrl()
   {
      return this.url;
   }
}

Я что-то не так делаю?

1 Ответ

1 голос
/ 29 марта 2012

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

Вы можете использовать Hibernate.initialize (itemVersionLanguage.getItemVersion ()) для загрузки значения прокси до закрытия сеанса.

Подробнее см. http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-fetching-initialization.

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