Criteria por id [RESOLVIDO]

8 respostas
RicardoYukito

Preciso fazer uma busca pelo id de um objeto, estou fazendo assim :

public Fisica ListarUmaAdvogado(int id) throws Exception { Fisica f = null; try { session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); f =(Fisica) session.get(Fisica.class, id); f.getAdvogado().iterator();

Estou listando uma pessoaFisica, com seus dados de advogado.
O problema é que eu preciso tbm listar uma colleção de Especialidades que este advogado tem… como inicializo essa coleção ?

8 Respostas

dxos

como que esta o seu relacionamento na classe fisica e especialistas??

RicardoYukito

Fisica para advogado

@OneToMany(mappedBy = "advogadoFisica", targetEntity = Advogado.class, fetch = FetchType.LAZY) @IndexColumn(name = "ADV_INDEX") @Cascade(CascadeType.ALL) private Collection<Advogado> advogado = new ArrayList<Advogado>();

Advogado para fisica e especialidade

@ManyToMany 
    @JoinTable(name = "ADV_ESPECIALIDADE", joinColumns =
    @JoinColumn(name = "ADVOGADO_ID"),
    inverseJoinColumns =
    @JoinColumn(name = "ESPECIALIDADE_ID"))
    private Collection<Especialidade> especialidade = new ArrayList<Especialidade>() ;


 @ManyToOne (targetEntity=Fisica.class)
    @Cascade (org.hibernate.annotations.CascadeType.EVICT)
    @JoinColumn (name= "ADVOGADO_FISICA")
    @ForeignKey (name = "ADV_FISICA_FK")
    private Fisica advogadoFisica;

Especialidade para Advogado

@ManyToMany
    @JoinTable(name = "ADV_ESPECIALIDADE", joinColumns =
    @JoinColumn(name = "ESPECIALIDADE_ID"),
    inverseJoinColumns =
    @JoinColumn(name = "ADVOGADO_ID"))
    private Collection<Advogado> advogado = new ArrayList<Advogado>();
dxos

você já tentou não instanciar este ArrayList, que você usa Toda vez q monta uma Collection?
Exemplo:

@ManyToMany   
    @JoinTable(name = "ADV_ESPECIALIDADE", joinColumns =   
    @JoinColumn(name = "ESPECIALIDADE_ID"),   
    inverseJoinColumns =   
    @JoinColumn(name = "ADVOGADO_ID"))   
    private Collection<Advogado> advogado; //retirando daqui o seu new ArrayList
RicardoYukito

Tentei, mas meu problema é esse

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: Model.Advogado.especialidade, no session or session was closed

Eu estou carregando uma PessoaFisica:f =(Fisica) session.get(Fisica.class, id) Inicializei a Collection de Advogados dessa pessoa:f.getAdvogado().iterator(); porém, nao sei como faze agora para iniciar um collection de Especialidade desse advogado, meu @ManyToMany de advogado pra especialidade esta como Lazy, nao posso usar Eager pois senao complica meus relatorios, preciso inicializar somente nesse caso.

jyoshiriro

Esse é um típico erro em aplicações WEB sem aplicação do padrão “open session in view”. É o seu caso?

RicardoYukito

é uma aplicação simples desktop.

jyoshiriro

Bem, então o objeto “session” está “closed”, ou seja, foi usado o método “close()” nele antes de solicitar a lista desejada.

RicardoYukito

realmente a sessao tava um close() antes do return , nao me atentei nisso;

Obrigado pela ajuda.

Criado 29 de julho de 2010
Ultima resposta 29 de jul. de 2010
Respostas 8
Participantes 3