Ajuda com JPA+ HIBERNATE

Senhores.
Tenho uma classe chamada Usuario.



@Entity
@Table(name = "tb_usuario")
public class Usuario {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;

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

	@Column(name = "senha", nullable = false, length = 32)
	private String senha;
	
	@Column(name = "hash_md5", nullable = false, length = 32)
	private String hashMD5Email;

	@Column(name = "status", nullable = false)
	private int ativo = 0;
	
	@OneToMany(mappedBy = "usuario",cascade = CascadeType.ALL)
	//@JoinColumn(name = "id_usuario")
	private List consultas ;

	@Column(name = "data_cadastro", nullable = false)
	@Temporal(TemporalType.DATE)
	private Calendar dataCadastro;

	public Usuario() {
		
	}
	
	
	public void setDataCadastro(Calendar dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public Calendar getDataCadastro() {
		return dataCadastro;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public void setAtivo(int ativo) {
		this.ativo = ativo;
	}

	public int getAtivo() {
		return ativo;
	}


	public List getConsultas() {
		return consultas;
	}


	public void setConsultas(List consultas) {
		this.consultas = consultas;
	}

Tenho também uma classe chamada ‘ConsultaTratadaHtml’, segue o código da mesma.


@Entity
@Table(name = "tb_consulta")
public class ConsultaTratadaHtml {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;

	@Column(name = "consulta_html", nullable = false, length = 500)
	private String consultaHtml;

	@Column(name = "data_consulta", nullable = false)
	@Temporal(TemporalType.DATE)
	private Calendar dataConsulta;
	
	@ManyToOne(cascade = CascadeType.ALL)
	@JoinColumn(name="id_usuario",nullable = false)
	private Usuario usuario;


	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getConsultaHtml() {
		return consultaHtml;
	}

	public void setConsultaHtml(String consultaHtml) {
		this.consultaHtml = consultaHtml;
	}

	public Calendar getDataConsulta() {
		return dataConsulta;
	}

	public void setDataConsulta(Calendar dataConsulta) {
		this.dataConsulta = dataConsulta;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
}

Como é possivel perceber a classe Usuario tem um relacionamento oneToMany com a classe ConsultaTratadaHtml. E a classe ConsultaTratadaHtml tem um relacionamento ManyToOne com a classe Usuário. Ou seja temos um relacionamento bidirecional, sendo que a chave fica na classe ConsultaTratadaHtml. Estou tentando salvar uma nova ConsultaTratadaHtml usando o seguitne código :


Usuario usuario = new UsuarioDAO().buscarUsuarioByEmail("pedro@gmail");

		ConsultaTratadaHtml consulta = new ConsultaTratadaHtml();
		
		consulta.setConsultaHtml("teste de persistencia");
		consulta.setDataConsulta(Calendar.getInstance());				
		
		consulta.setUsuario(usuario);
		usuario.getConsultas().add(consulta);
		
		new ConsultaTratadaHtmlDAO().salvarConsulta(consulta);
		

Mas gera um erro na seguinte linha :

usuario.getConsultas().add(consulta);

A seguinte mensagem de erro

xception in thread “main” org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.pedrodev.webservicecpf.domain.Usuario.consultas, could not initialize proxy - no Session
at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:582)
at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:201)
at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:561)
at org.hibernate.collection.internal.AbstractPersistentCollection.write(AbstractPersistentCollection.java:392)
at org.hibernate.collection.internal.PersistentBag.add(PersistentBag.java:297)
at testes.Programa.main(Programa.java:39)

Alguém tem idéia do que pode ser?

FInish

Você conseguiu resolver ?

Você precisa usar o mesmo entityManager que você usou para buscar o usuário.