Como realizar busca pela chave estrangeira com JPA

3 respostas
eclipselinkjava
Kleiton_A_Batista

Boa noite, estou tentando realizar uma busca com jpa, estou com a seguinte query

String jpql = "Select m from Medicamento m where m.usuario_id = ?1";

mas da esse erro:

Exception in thread “main” java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager:
Exception Description: Problem compiling [Select m from Medicamento m where m.usuario_id = ?1].
[34, 46] The state field path ‘m.usuario_id’ cannot be resolved to a valid type.`

classe medicamento

@Entity
public class Medicamento implements Serializable {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer id;
	private String codigoBarras;
	private String nomeProduto;
	private String principioAtivo;
	private String apresentacao;
	private String laboratorio;
	private String classeTerapeutica;

classe usuario

@Entity()
public class Usuario implements Serializable{
	
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE)
	private Integer idUsuario;
	private Integer idade;
	private String nome;
	private String email;
	private String senha;
	@JoinColumn(name = "usuario_id")
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	private List<Medicamento> medicamentos = new ArrayList<Medicamento>();`

3 Respostas

Lucas_Camara

No where, você usou o nome da coluna para fazer a condição (m.usuario_id). Para funcionar, você deve usar o nome do atributo da classe.

igomes

E pelo o que vc postou, na classe medicamente vc não tem referência alguma ao usuário.
E como nosso amigo @Lucas_Camara jpql vc faz em cima das suas entidades/atributos, esqueça as colunas do banco.

M

Duas dicas:
1° Se estiver usando NetBeans o atalho ctrl + espaço vai te auxiliando a montas a jpql, e inclusive a pré verifica contra erros.

2° Aconselho parametrizar usando :id ao invés ?1. Por ser mais fácil a manutenção do código em futura adição de parametros.

E posta sua classe de acesso aos dados, para que possamos analisar melhor seu problema.

Criado 25 de agosto de 2016
Ultima resposta 26 de ago. de 2016
Respostas 3
Participantes 4