Lista,
Quando tento aceesar o Set abaixo o hibernate me devolve ese erro:
could not initialize proxy - the owning Session was closed.
Se comento a linha session.close() no dao aí funciona.
Como acessar o objeto depois de fechada a sessão?
Muito obrigado,
Marques
método no meu DAO
public Produto getProduto(Long idProduto) {
session = DBConnection.getInstance();
try {
return (Produto) session.load(Produto.class, idProduto);
} catch (Exception e) {
System.out.println();
throw new RuntimeException(e);
} finally {
if (session != null) {
try {
session.close();
} catch (Exception e) {
System.out.println();
throw new RuntimeException(e);
}
}
}
}
A minha classe Produto
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
@Entity
public class Produto implements Serializable {
private Long idProduto;
private String codigoProduto;
private String codigoBarras;
private Long unidadeMedida;
private String descrProduto;
private ProdutoSubnivel subnivel;
private BigDecimal estoqueMinimo;
private String localizacao;
private BigDecimal pesoLiquido;
private Long idSituacaoTrib;
private Long idCodigoNCM;
private Set<ContaContabil> contaContabil;
//outros getters e setters
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
public Long getIdProduto() {
return idProduto;
}
public void setIdProduto(Long idProduto) {
this.idProduto = idProduto;
}
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "idSubnivel")
public ProdutoSubnivel getSubnivel() {
return subnivel;
}
@ManyToMany(fetch = FetchType.EAGER,
targetEntity=ContaContabil.class, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
@JoinTable(
name="ProdutoContaContabil",
joinColumns={@JoinColumn(name="idProduto", table="contaContabil")},
inverseJoinColumns = @JoinColumn( name="idContaContabil"))
public Set<ContaContabil> getContaContabil() {
return contaContabil;
}
public void setContaContabil(Set<ContaContabil> contaContabil) {
this.contaContabil = contaContabil;
}
}
A classe onde tento acessar o Produto
Produto produto = produtoDAO.getProduto(idProduto);
Set<ContaContabil> contas = produto.getContaContabil();