Fórum Erro LazyInitializationException em propriedade EAGER (isso mesmo!!!) #398033

25/03/2011

0

Estou usando o JSF 2.0(mojarra 2.0.4) + Primefaces + Spring 3.0.5 + Hibernate 3.6 com
este modelo abaixo, eu faço
esse mapeamento, e mesmo colocando o @Any como EAGER dá uma
LazyInitializationExeception mesmo se o meu MBean for de escopo Session, eu já
até coloquei o filtro OpenSessionInView do Spring e dá no mesmo.
 
Obs: tenho uma página com um DataTable(e selection single do primefaces), quando o usuário clica no registro
ele seta o obj selecionado em um objeto do MBean, e ao clicar em Editar ele abre
outra página para editar o registro setado, e nesta hora que dá o LIE.
 
Poderia me ajudar ? abaixo parte do código.
 
 
@Entity

public class Pessoa implements Serializable {

    private static final long serialVersionUID = 

3400394713317764808L;

 

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private Long codigo;

    @Column(length = 50)

    private String nome;

    private ClassePessoa classe;

    @Enumerated(EnumType.STRING)

    private TipoPessoa tipoPessoa;

    @Any(metaColumn = @Column(name = "tipo_dados"))

    @AnyMetaDef(idType = "long", metaType = "string", metaValues = {

        @MetaValue(value = "FISICA", targetEntity = 

DadosPessoaFisica.class),

        @MetaValue(value = "JURIDICA", targetEntity = 

DadosPessoaJuridica.class)})

    @JoinColumn(name = "codigo_dados")

    @Cascade(org.hibernate.annotations.CascadeType.ALL)

    private Dados dados;

 
-------------------------------------
public interface Dados extends Serializable{}

--------------------------------------

[code]@Entity

public class DadosPessoaFisica implements Dados, Serializable{

    private static final long serialVersionUID = 

3230268695240296033L;

 

    @Id

    @GeneratedValue(strategy=GenerationType.IDENTITY)

    private Long codigo;

    @Column(length=20)

    private String rg;

    @Column(length=10)

    private String orgaoExpedidor;

    @Temporal(TemporalType.DATE)

    private Date dataExpedicao;

    @Column(length=14)

    private String cpf;

    @Temporal(TemporalType.DATE)

    private Date dataNascimento;

    @Enumerated(EnumType.STRING)

    private EstadoCivil estadoCivil;

    @Column(length=50)

    private String naturalidade;

    @Column(length=50)

    private String nomePai;

    @Column(length=50)

    private String nomeMae;

    @Column(length=50)

    private String localTrabalho;

    @Column(length=50)

    private String nomeConjugue;

-------------------------------------------------------
@Repository("pessoaDAO")

@Scope("singleton")

@Transactional(readOnly=true)

public class PessoaDAOImpl extends HibernateDaoSupport implements PessoaDAO 

{

    private static final long serialVersionUID = 

8668800837955656728L;

 

    @Autowired

    public PessoaDAOImpl(SessionFactory sessionFactory) {

        setSessionFactory(sessionFactory);

    }

 

    @Override

    @Transactional(propagation=Propagation.REQUIRED, readOnly=false)

    public void store(Pessoa object) {

        try {

                getHibernateTemplate().saveOrUpdate(object);

        } catch (Exception e) {

            e.printStackTrace();

            throw new DAOServiceException("Erro ao tentar gravar : " + 

object + ", " + e.getMessage());

        }

    }

 

    @Override

    @Transactional(propagation=Propagation.REQUIRED, readOnly=false)

    public void remove(Pessoa object) {

        try {

            getHibernateTemplate().delete(object);

        } catch (Exception e) {

            e.printStackTrace();

            throw new DAOServiceException("Erro ao tentar apagar : " + 

object + ", " + e.getMessage());

        }

    }

 

    @Override

    public Pessoa findByPrimaryKey(Long pk) {

        Pessoa p;

        try {

            p = getHibernateTemplate().get(Pessoa.class, pk);

        } catch (Exception e) {

            throw new DAOServiceException(

                    "Erro ao tentar localizar " + this.getClass().getName() 

+ " pela pk : " + pk, e);

        }

        return p;

    }

 

    @Override

    public List<Pessoa> loadAll() {

        List<Pessoa> lista = null;

        try {

              lista = 

(List<Pessoa>)getHibernateTemplate().loadAll(Pessoa.class);

        } catch (Exception e) {

            throw new DAOServiceException(

                    "Erro ao tentar retornar todos os registros de " + 

this.getClass().getName() + ".", e);

        }

 

        return lista;

    }

 

    @Override

    public Set<Pessoa> loadAll2() {

        return (Set<Pessoa>) 

getHibernateTemplate().loadAll(Pessoa.class);

    }

}

 
Pedro Andrade

Pedro Andrade

Responder

Posts

25/03/2011

Dyego Carmo

Poderia colar o erro com stack completo aqui ?
Seu exemplo do fonte nao tem EAGER marcado...
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar