2012-06-03 5 views
0

У меня проблема с lazy="extra" fetch в hibernate в java.lazy = "extra" fetch в hibernate java не работает

Я создал два класса, родительский и дочерний. В родительском классе, я определил следующие поля:

public class Parent{ 

... 

@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="parent") 

@IndexColumn(name="index", base=1) 

**@LazyCollection(LazyCollectionOption.EXTRA)** 

    private List<Child> children = new ArrayList<Child>(); 

    public List<Child> getChildren() { 
    return children; 
    } 

    public void setChildren(List<Child> children) { 
    this.children = children; 
    } 

... 

} 

соответственно, в классе ребенка я это определение

public class Child{ 
... 

@ManyToOne(fetch = FetchType.LAZY, optional = true) 

@JoinColumn(name = "parent_ID", nullable = true) 

private Parent parent; 

public Parent getParent() { 
    return parent; 
    } 

public void setParent(Parent parent) { 
    this.parent = parent; 
    } 

... 

} 

родительского поля Но когда я звоню в моей полезности класса, чтобы получить parent.getChildren() .size() у меня есть ошибка

не удалось инициализировать лениво коллекцию роли: com.realcommerce.formsGenerator.entity.Parent.children, не сеанс или сеанс был закрыт

может кто-нибудь помочь мне понять, что я сделал неправильно, и почему мой код не работает

ответ

0

Эта ошибка обычно происходит, если вы сделаете следующее:

  1. открытой сессии
  2. выберите родительские данные
  3. закрытие сессии
  4. данные доступа с ленивой загрузкой (стр. ех. parent.getChildren())

На шаге 4. вы получаете эту ошибку, потому что Hibernate пытается загрузить данные с ленивой загрузкой, что невозможно, потому что вы уже закрыли сеанс.

Проверьте свой код: Когда вы закрываете сеанс.

Решение проблемы заключается в том, чтобы не закрывать сеанс или получать доступ к ленивым данным перед закрытием сеанса, даже если это не требуется в этот момент.

+0

Благодарим вас за ответ –