Consulta por mapeamento

5 respostas
L

Bom dia a todos,

Eu tenho duas entidades onde elas possue um relacionamento @ManyToMany, logo eu tenho uma tabela deste relacionamento. Gostaria de saber como eu faço uma consulta desta tabela que está sendo relacionada.

Meu mapeamento:

@ManyToMany @JoinTable(name="sistema_perfilusuario", joinColumns = {@JoinColumn(name="idSistema")}, inverseJoinColumns = {@JoinColumn(name="idUsuario")}) private List<PerfilUsuario> usuarios;

Eu queria fazer assim:

select p from sistema_perfilusuario p.

Exception que eu estou recebendo.

Desde já. obrigado a todos!

5 Respostas

giovanni_dalfre

Se você não criou uma classe para representar a tabela de relacionamento, você não vai conseguir dar o select nela… pois pelo que vi você só fez o “JoinTable” né?

Desculpa a pergunta, mas para que você quer dar um select nessa tabela .-.?

Hebert_Coelho

JPQL funciona com consulta em cima da classe e não em cima da tabela.

Vai dar erro sempre que você tentar fazer buscando por algo específico do banco.

Faça a consulta em cima da Classe e não do banco de dados.

L

Eu tenho uma entidade Usuario e uma entidade Sistema onde um Usuario pode estar em varios sistemas. Sendo assim no meu relacionamento @ManyToMany se cria a tabela associativa. E eu só o registro desses mapeamentos nesta tabela. Como ficaria então a consulta?

Hebert_Coelho

luis.feitoza:
Eu tenho uma entidade Usuario e uma entidade Sistema onde um Usuario pode estar em varios sistemas. Sendo assim no meu relacionamento @ManyToMany se cria a tabela associativa. E eu só o registro desses mapeamentos nesta tabela. Como ficaria então a consulta?
Você tentou? Qual erro você teve?

Você faz a pesquisa pelo relacionamento Java e não pelas tabelas. Se sua classe tem o objeto lá dentro, você relaciona direto lá dentro. [=

Esse post vai te ajudar: JPA Consultas e Dicas

L

Bom dia,

Estou tentando fazer desta forma.

from Sistema s where s.usuarios.idUsuario = 1

Quando eu vejo no modo debug ele não passa da consulta e eu acabo recebendo está execeção.

value="#{perfilUsuarioBean.perfilUsuariosSistemas}": Error reading 'perfilUsuariosSistemas' on type br.com.sisapropriacao.mb.PerfilUsuarioBean

Segue minhas entidades.

Entidade PerfilUsuario:

@Entity
@SessionScoped
public class PerfilUsuario implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id 
	@GeneratedValue
	private Long idUsuario;
	
	@NotEmpty
	private String login;

	@NotEmpty
	private String senha;
		
	@NotEmpty
	private String nome;
	
	@NotEmpty
	private String endereco;
	
	@NotEmpty
	private String telefone;
	
	@NotEmpty
	private String rg;
	
	@NotEmpty
	private String cpf;
	
	private String complemento;
	
	@NotEmpty
	@Pattern(regexp = "^([0-1][0-9]|[2][0-3])(:([0-5][0-9])){1,2}$", message = "Hora inválida.")
	private String horaTrabalhada;
	
	@NotEmpty
	private String sexo;
	
	@Enumerated(EnumType.STRING)
	private TipoUsuario tipoUsuario;
	
	@Enumerated(EnumType.STRING)
	private TipoFuncionario tipoFuncionario;
	
    @ManyToMany(mappedBy="usuarios", fetch= FetchType.EAGER)
    private List<Sistema> sistemas;
Entidade Sistemas:
@Entity
public class Sistema implements Serializable {

	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue
	private Long idSistema;
	private String nomeSistema;
	private String descricao;
	
	@ManyToMany
	@JoinTable(name="sistema_perfilusuario", 
			joinColumns = {@JoinColumn(name="idSistema")}, 
			inverseJoinColumns = {@JoinColumn(name="idUsuario")})
	private List<PerfilUsuario> usuarios;
Criado 6 de agosto de 2012
Ultima resposta 16 de ago. de 2012
Respostas 5
Participantes 3