Consulta N:N hibernate[RESOLVIDO]

Boa Tarde pessoal,

naum estou conseguindo fazer uma consulta n:n com hibernate.

tenho Usuario

@Entity

public class Usuario {
	private Integer idUsuario;

	private String nome;

	private String login;
@Id
	@GeneratedValue
	public Integer getIdUsuario() {
		return idUsuario;
	}

	public void setIdUsuario(Integer idUsuario) {
		this.idUsuario = idUsuario;
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
}

e Mensagem

@Entity

public class Mensagem {
	private Integer idMensagem;

	private String corpo;

	private List<Usuario> destinatario;

	private Date dataEnvio;

	@Lob
	public String getCorpo() {
		return corpo;
	}

	public void setCorpo(String corpo) {
		this.corpo = corpo;
	}

	public Date getDataEnvio() {
		return dataEnvio;
	}

	public void setDataEnvio(Date dataEnvio) {
		this.dataEnvio = dataEnvio;
	}
	
	@ManyToMany
	public List<Usuario> getDestinatario() {
		return destinatario;
	}

	public void setDestinatario(List<Usuario> destinatario) {
		this.destinatario = destinatario;
	}

	@Id
	@GeneratedValue
	public Integer getIdMensagem() {
		return idMensagem;
	}

	public void setIdMensagem(Integer idMensagem) {
		this.idMensagem = idMensagem;
	}
	public void addUsuario(Usuario u){
		this.destinatario.add(u);
		
	}

}

Um usuario pode receber n mensagens e uma mensagem pode conter n destinatários (usuario);

Estou usando Hibernate e preciso de ajuda para montar uma consulta em minha MensagemDAO que me retorne uma lista das mensagens cujo destinatario com nome “João”.

Dsde já agradeço.

Ps. Se precisar esclarecer mais alguma coisa eh soh falar

Opa!

Então, não sei se isso que você quer, mas no método abaixo,
o filtro é feito de acordo com o atributo nome da classe Usuario,
te retornando uma lista com as Mensagens enviadas para o usuário
que tenha o nome passado no parâmetro nomeUsuário.

	public List<Mensagem> listarMensagens(String nomeUsuario) {

		Criteria criteria = session.createCriteria(Mensagem.class);

		criteria.createCriteria("destinatario").add(
			Expression.like("nome", nomeUsuario));

		List<Mensagem> list = criteria.list();


		for (Mensagem mensagem : list) {
			Hibernate.initialize(mensagem.getDestinatario());
			for (Usuario usuario : mensagem.getDestinatario()) {
				Hibernate.initialize(usuario);
			}
		}

		return list;
	}

Espero ter ajudado!

[]s

Leonardo Barbosa.

Duas formas:

criteria.createCriteria( "usuarios", "usuario" ).add( Restrictions.eq( "nome", "joao" ) );

Ou:

criteria.createAlias( "usuarios", "usuario" ).add( Restrictions.eq( "usuario.nome", "joao" ) );

Vlew LeonardoCComp, usarei a forma q vc passou…

mas obrigado a todos