ArrayList no Bean fica nulo (Ajuda aew)

tenho um managedbean chamado UsuarioBean e é do escopo session
As variaveis globais são inicializadas apenas uma vez?
seu construtor é chamado apenas uma vez ?

Tenho essa classe:
(Usuario)

[code]@Entity
public class Usuario
{
@Id
@GeneratedValue
@Column(name=“id”)
private long id;

@Column(name="email", length=50, unique=true, nullable=false)
private String email;

@Column(name="senha", length=20, nullable=false)
private String senha;

@OneToOne(mappedBy="usuario")
@Cascade(CascadeType.ALL)
private Perfil perfil = new Perfil();

@Temporal(TemporalType.TIMESTAMP)
@Column(name="data_cadastro")
private Date dataDeCadastro;

public Usuario(){
	this.getPerfil().setUsuario(this);
}

.
.
.[/code]

Usuario tem um perfil:
(Perfil)

[code]@Entity
public class Perfil
{
@Id
@GeneratedValue
private long id;

@OneToOne
@JoinColumn(name="id_usuario")
private Usuario usuario;

@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name="Amizade", schema="perfil", joinColumns={@JoinColumn(name="id_perfil")}, inverseJoinColumns={@JoinColumn(name="id_amigo")})
private List<Perfil> amigos = new ArrayList<Perfil>();

@OneToMany(mappedBy="perfil", fetch=FetchType.LAZY)
@Cascade(CascadeType.ALL)
private List<Recado> recados = new ArrayList<Recado>();

public Perfil(){
	
}

.
.
.
[/code]

um perfil pode ter varios recados:
(Recado)

[code]@Entity
public class Recado
{
@Id
@GeneratedValue
private long id;

@Column(name="conteudo")
private String conteudo;

@Column(name="id_remetente")
private long idRemetente;

@Temporal(TemporalType.TIME)
@Column(name="horario_envio")
private Date horarioEnvio;

@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="id_perfil", nullable=true, updatable=true)
@Cascade(CascadeType.ALL)
private Perfil perfil;

public Recado(){
	
}

.
.
.
[/code]

… pronto, agora eu tenho um recadoBean de escopo request

(RecadoBean)

[code]public class RecadoBean {
private Recado recado = new Recado();
private Perfil perfil;

public RecadoBean(){

}

public String save(){
	try{
		UsuarioBean usuarioBean = (UsuarioBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("usuarioBean");
		this.perfil = usuarioBean.getUsuario().getPerfil();
		HibernateUtil.getSession();
		HibernateUtil.beginTransaction();
		recado.setPerfil(this.perfil);
		recado.setIdRemetente(this.perfil.getId());
		perfil.getRecados().add(recado);
		HibernateUtil.getSession().save(recado);
		HibernateUtil.commitTransaction();
	}
	catch (Exception e) {
		e.printStackTrace();
	}
	finally{
		HibernateUtil.closeSession();
	}
	return "recados.jsf";
}

.
.
.
[/code]

eu pego o usuarioBean da sessao pelo comando
UsuarioBean usuarioBean = (UsuarioBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(“usuarioBean”);

recupero o usuario pelo comando
this.perfil = usuarioBean.getUsuario().getPerfil();
ele retorna o perfil certo …

o problema esta nessa linha:
perfil.getRecados().add(recado);

o erro:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: entidades.Perfil.recados, no session or session was closed

aqui esta o jsp:
<h3>Deixe um recado</h3> <rich:spacer height="10"/> <rich:editor id="editor" height="100" width="520" theme="simple" value="#{recadoBean.recado.conteudo}"/> <rich:spacer height="20"/> <h:commandButton value="Enviar recado" action="#{recadoBean.save}"/>

alguem pode me ajudar ? valeu galera.

Do jeito que está fazendo vai ficar bem dificil manter esse código.

Separa as consultas do hibernate dos beans…

separar como ? criar classes DAO ?

Sim…

No Bean tu coloca um ArrayList, get e tudo mais…

É com o Hibernate tem sempre que dar um load no objeto e tal…

vc consegue identificar o problema ?
de estar vindo nulo ?