Olá pessoal, estou des3envolvendo web, jsf com hibernate e spring, capturo o objeto de uma table vindo de uma lista:
public void getOcorrencia(Cidade cidade) {
this.inicializarOcorrencia();
ocorrenciasTrecho = new ArrayList<Ocorrencia>();
cidadeOcorrencia = cidade;
if (ocorrencias.containsKey(cidade.getId())) {
ocorrenciasTrecho = ocorrencias.get(cidade.getId());
}
}
o objeto cidade vem com todos os atributos nulos, ms o handler dele vem todo preenchido, alguém sabe pq?? e mesmo eu dando um getById, q recupero pelo id, continua assim, mas ele não está nulo, mas não consigo usar suas propriedades…
Objetos carregados de maneiras Lazy funcionam de maneira diferente, ele só recupera um atributo do banco no momento em que esse atributo for utilizado.
caso ocorra um caso em que você tente acessar o atributo sem uma conexão aberta, será lançada uma LazyInitializationException.
[quote=winigma]eu sei, mas quando eu dou um cidade = facade.getCidadeById(cidade.getId());
ele recupera objeto individualmente… então ele teria que ser recuperado.[/quote]
Esse seu “teria” depende de muitos fatores… Eu digo que ele “poderia” ser completamente carregado.
isso vai depender do seu mapeamento e/ou da implementação do seu método.
public Cidade getById(Serializable arg) {
HQLQuery<Cidade> hql = new HQLQuery<Cidade>(entityManager);
hql.append("from Cidade c");
hql.appendEqual("c.id", arg);
Cidade cidade = hql.getSingleResult();
return cidade;
}
[quote=winigma]Referente ao artigo, não dar erro, não há exception… só fica no handler mesmo… atributos nulos[/quote]Mesmo que não dê o erro, o conceito prevalece. Objeto lazy não carrega desse modo.
@Entity @Table( name = “FOLLOW_UP_IMPORT_TRECHO” )
public class FollowUpImportTrecho implements Identificavel {
/** */
private static final long serialVersionUID = 1470741965131500466L;
@Id
@SequenceGenerator( name = "gen", sequenceName = "follow_up_imp_trecho_id_seq" )
@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "gen" )
private Long id;
@Temporal(TemporalType.DATE)
@NotNull(message="notnull")
@Label( "lblDtPlanejado" )
@Column( name = "DT_PLANEJADO", nullable = false )
private Date dtPlanejado;
@JoinColumn( name = "ID_CIDADE" )
@ManyToOne( fetch = FetchType.EAGER )
@Label( "lblFollowUp" )
@Fetch(FetchMode.JOIN)
private Cidade cidade;
}[/code]
essa a outra parte da outra entidade que se liga a cidade, puts que problema chato nem passando o id manualmente e fazendo o metodo, o objeto carrega,…
Agora se fosse JPA, os atributos que não estão relacionados com anotações *ToMany ou marcados explicitamente como lazy, deveriam vir carregados, como o nome, a sigla e o estado.
não sei mais ql o problema… mesmo se eu pegar cidade isoladamente no método e passar na marretada por exemplo id, ele não carrega, continua vindo nulos, agora no editar cidade uma outra tela ele carrega,… mesmo método getById…