olá
sei q LazyInitializationException eh comum por ai mas pesquisei muuuito antes de postar aqui
eu tenho o seguintes beans (vou resumir o codigo)
estah dando lazy no manytoone Empresa e seu manyToone TipoEmpresa
colaborador->empresa->tipoempresa
public class Colaborador implements Serializable {
private Long id;
private PessoaFisica pessoaFisica;
private Empresa empresa;
private Colaborador superiorImediato;
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "EMPRESA_ID")
public Empresa getEmpresa() {
return this.empresa;
}...
empresa->tipoempresa
public class Empresa implements Serializable {
private Long id;
private TipoEmpresa tipoEmpresa;
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "TIPO_EMPRESA_ID")
public TipoEmpresa getTipoEmpresa() {
return this.tipoEmpresa;
}...
tipoempresa
public class TipoEmpresa implements Serializable {
private Long id;
private String tipoEmpresa;
o erro acontece quando eu vou fazer uma busca por TODOS os colaboradores
antes de tudo considere que no banco de dados , a tabela Empresa possui soh um registro, e nesse unico registro nao foi informado o TipoEmpresa, isto eh. Empresa.tipoEmpresa eh NULL
como eu busco TODAS AS COLUNAS dos colaboradores e preciso de alguns dados como pessoaFisica.nome, empresa.nomeFantasia e etc, dai eu ajusto o fetch mode join nas propriedades pessoaFisica ,empresa e superiorImediato do bean Colaborador… ateh ai beleza… eu consigo obter os dados normalmente… (ateh aqui, eu ainda nao recebi o Lazy pq empresa.tipoEmpresa eh null, nao salvei ainda um TipoEmpresa para a empresa)
MAS, se atualizar o unico registro da tabela de empresa e ajustar o TipoEmpresa neste registro, isto é, Empresa.tipoEmpresa for igual a 1 por exemplo (1 eh a FK da tabela TipoEmpresa) eu obtenho o LazyInitalizationException…
eu mando o hibernate fazer join soh em pessoaFisica ,empresa e superiorImediato, esperando q empresa.tipoEmpresa venha apenas um objeto TipoEmpresa com o ID 1 e mais nenhum dado… isto eh quero soh o id de tipoEmpresa(fk salva no banco)… (diferente se fosse EAGER, onde empresa.tipoEmpresa viria o objeto completo, com id e todos os outros dados)
mas continuo recebendo o lazy
alguem pode me ajudar com este problema?
eu NAO quero TipoEmpresa na consulta de todos os colaboradores , apenas a empresa.nomeFantasia q eles correspondem
detalhe: se eu acessar o criteria.list() logo dps de executar a sql, o objeto TipoEmpresa de Empresa jah vai estar com Javassist_LazyInitializationException, isto eh, nao eh nada na view tentando acessar algo com a sessao fechada
sql gerada pelo hibernate
select
this_.ID as ID5_3_,
this_.EMPRESA_ID as EMPRESA2_5_3_,
this_.PESSOA_FISICA_ID as PESSOA3_5_3_,
this_.SUPERIOR_IMEDIATO_ID as SUPERIOR4_5_3_,
empresa2_.ID as ID6_0_,
empresa2_.CEI as CEI6_0_,
empresa2_.CNPJ as CNPJ6_0_,
empresa2_.CONTATO_ID as CONTATO23_6_0_,
empresa2_.IMAGEM as IMAGEM6_0_,
empresa2_.INSCRICAO_ESTADUAL as INSCRICAO14_6_0_,
empresa2_.INSCRICAO_MUNICIPAL as INSCRICAO15_6_0_,
empresa2_.LOGOMARCA as LOGOMARCA6_0_,
empresa2_.NOME_FANTASIA as NOME18_6_0_,
empresa2_.RAZAO_SOCIAL as RAZAO19_6_0_,
empresa2_.RESPONSAVEL_ID as RESPONS24_6_0_,
empresa2_.STATUS as STATUS6_0_,
empresa2_.TELEFONE as TELEFONE6_0_,
empresa2_.TIPO_EMPRESA_ID as TIPO25_6_0_,
pessoafisi3_.ID as ID7_1_,
pessoafisi3_.CPF as CPF7_1_,
pessoafisi3_.NOME_COMPLETO as NOME3_7_1_,
pessoafisi3_.RG as RG7_1_,
colaborado4_.ID as ID5_2_,
colaborado4_.EMPRESA_ID as EMPRESA2_5_2_,
colaborado4_.PESSOA_FISICA_ID as PESSOA3_5_2_,
colaborado4_.SUPERIOR_IMEDIATO_ID as SUPERIOR4_5_2_
from
colaborador this_
left outer join
empresa empresa2_
on this_.EMPRESA_ID=empresa2_.ID
left outer join
pessoa_fisica pessoafisi3_
on this_.PESSOA_FISICA_ID=pessoafisi3_.ID
left outer join
colaborador colaborado4_
on this_.SUPERIOR_IMEDIATO_ID=colaborado4_.ID
where
(
1=1
)
order by
this_.ID desc