Hibernate Consulta

5 respostas
EmerXavier

Boa noite, moçada.

Seguinte:
1 - Tenho um relacionamento NxN de Perfil com Funcionalidade.

2 - Quando faço o login recupero o usuário com o seu perfil e uma lista de funcionalidades.

Problema: No banco eu inseri duas funcionalidades para o mesmo perfil e quando ocorre a consulta o hibernate só me traz UMA Funcionalidade na lista.

Tem alguma detalhe faltando?

Obrigado!
Abraço!

5 Respostas

drsmachado

Como está o mapeamento e, principalmente, como é feita a consulta?

EmerXavier
@Table(name="TB_USUARIO")
public class UsuarioEntity extends EntitySGP {
	
	@Id @GeneratedValue
	private Long id;
	
	private String nome;
	@NaturalId
	private String login;
	private String senha;
	private String email;
	private String status;
	
	@ManyToOne
	@JoinColumn(name="ID_TO_PERFIL", referencedColumnName="ID")
	private PerfilAcessoEntity perfil;
@Table(name="TB_PERFIL_ACESSO")
public class PerfilAcessoEntity extends EntitySGP {
	
	@Id @GeneratedValue
	private Long id;
	
	@NaturalId
	private String nome;
	
	private String status;
	
	@Column(name="CODIGO")
	private String siglaPerfil;
	
	@OneToMany(fetch=FetchType.EAGER)
	@JoinColumn(name="ID_TO_FUNCIONALIDADE", referencedColumnName="id")
	private List<FuncionalidadePerfilAcessoEntity> funcionalidades;
@Table(name="TB_FUNCIONALIDADE")
public class FuncionalidadeEntity extends EntitySGP {
	
	@Id @GeneratedValue
	private Long id;
	
	@NaturalId
	private String transacao;
	
	@Column(name="ITEM_MENU")
	private String itemMenu;
	
	private String status;
	
	@OneToMany(fetch=FetchType.LAZY)
	@JoinColumn(name="ID_TO_PERFIL", referencedColumnName="id", insertable=false, updatable=false)
	private List<PerfilAcessoEntity> perfils;
@Table(name="TB_FUNCIONALIDADE_PERFIL")
public class FuncionalidadePerfilAcessoEntity extends EntitySGP implements Serializable {
	  
	
	private static final long serialVersionUID = -1347704339554212281L;
	
	private FuncionalidadePerfilPK pk = new FuncionalidadePerfilPK();
	
	@Id @GeneratedValue
	private Long id;
	
	@Column(name="NIVEL_ACESSO")
	private String nivelAcesso;

DAO

public UsuarioEntity getUsuarioAutenticado(String login, String senha) {
		LOG.debug("getUsuarioAutenticado(String login, String senha)");
		try {
			Session session = getSession();
			Criteria criteria = session.createCriteria(UsuarioEntity.class);
			criteria.add(Restrictions.eq("login", login));
			criteria.add(Restrictions.eq("senha", senha));
			UsuarioEntity entity = (UsuarioEntity) criteria.uniqueResult();
			return entity;
		} catch (HibernateException e) {
			LOG.error(e.getMessage());
			throw e;			
		} finally {
			//closeSession();	
		}
	}
drsmachado

Sabe o que esta linha significa?

UsuarioEntity entity = (UsuarioEntity) criteria.uniqueResult();
EmerXavier

drsmachado:
Sabe o que esta linha significa?

UsuarioEntity entity = (UsuarioEntity) criteria.uniqueResult();

Eu quero recuperar um único registro de usuário e não de funcionalidade. Pelo menos não é isso que deveria.
Testei aqui dessa forma e não adiantou:

public UsuarioEntity getUsuarioAutenticado(String login, String senha) {
		LOG.debug("getUsuarioAutenticado(String login, String senha)");
		try {
			Session session = getSession();
			Criteria criteria = session.createCriteria(UsuarioEntity.class);
			criteria.add(Restrictions.eq("login", login));
			criteria.add(Restrictions.eq("senha", senha));
			List lista = criteria.list();
			UsuarioEntity entity = (UsuarioEntity) lista.get(0);
			return entity;
		} catch (HibernateException e) {
			LOG.error(e.getMessage());
			throw e;			
		} finally {
			//closeSession();	
		}
	}
EmerXavier

Alguma idéia?

Criado 7 de março de 2012
Ultima resposta 8 de mar. de 2012
Respostas 5
Participantes 2