Não cara.
- Novamente não é um código formatado. Selecione o código e USE o botão < / > pra formatar.
- Cadê a classe Usuario???
Não cara.
Modelo do usuário !
e foi mal, não sabia usar o negócio de formatar antes
@Entity
public class Usuario {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="userName", nullable=false, unique=true)
private String nome;
@Column(name="email", unique = true)
private String email;
@Column(name="password", nullable=false, unique=false)
private String senha;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
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;
}
JPQLs de outras entidades funcionam?
Sim, tenho cruds com esse usuario funcionando e que tem esse select
Tenho esse List, que funciona perfeitamente
public List<Usuario> listar() {
String jpql = "select u from Usuario u";
return manager.createQuery(jpql, Usuario.class).getResultList();
}
Então n faz sentido funcionar em um lugar mas em outro sim.
Verifica os imports se estão igual ao lugar que funciona. Principalmente o import da classe Usuario, se é a correta.
Esse List também está dentro do Dao do usuário, os imports são os mesmos, realmente não faz nenhum sentido
Posta a DAO completa ai.
O método q n funciona é de validação de login? Não estarias criando a factory apenas depois do login?
Usuario Dao
Tá um pouco diferente o método da validação sem os setParam aí por que estou testando de outras maneiras .-.
public class UsuarioDao {
private EntityManagerFactory factory = Persistence
.createEntityManagerFactory("pizzaria-dev");
@PersistenceContext
private EntityManager manager = factory.createEntityManager();
public Usuario getUsuario(String nome, String senha) {
try {
Usuario usuario = (Usuario) manager
.createQuery("select u from "+Usuario.class.getName()+" u where u.nome = "+nome+" and u.senha = :"+senha)
.getSingleResult();
return usuario;
} catch (NoResultException e) {
return null;
}
}
public void cadastrar(Usuario usuario) {
manager.persist(usuario);
}
public List<Usuario> listar() {
String jpql = "select u from Usuario u";
return manager.createQuery(jpql, Usuario.class).getResultList();
}
@Transactional
public void deletar(Usuario usuario) {
manager.remove(manager.getReference(Usuario.class, usuario.getId()));
}
@Transactional
public void editar(Usuario usuario) {
manager.merge(usuario);
manager.flush();
}
}
Isso vc pode desfazer, deixa só Usuario
Beleza, mas se eu deixar só Usuario aí volta a dar o erro que não acha a Entity
Sim, mas d qualquer jeito está com erro e deve funcionar com Usuario. Vc pode ter piorado e n avançado.
Chessuis, pelo amor de Deus, tira a concatenação da JPQL:
where u.nome = “+nome+” and u.senha = :"+senha
Usa parametros SEMPRE. Isso ai permite sql injection.
Beleza kkkk, fiz isso pra testar, e sqlinjection não é tanto um problema agora, que isso é uma atividade de curso
Deixei assim agora
public Usuario getUsuario(String nome, String senha) {
try {
Usuario usuario = (Usuario) manager
.createQuery("select u from Usuario u where u.nome = :name and u.senha = :senha")
.setParameter("name", nome)
.setParameter("senha", senha)
.getSingleResult();
return usuario;
} catch (NoResultException e) {
return null;
}
}
E ele volta o erro
javax.servlet.ServletException: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Usuario is not mapped [select u from Usuario u where u.nome = :name and u.senha = :senha]
Se certifica q neste momento da execução já foram mapeadas as classes.
Ou na mesma execução roda o outro comando q funciona antes deste, só pra testar.
Coloquei o método de listar antes e funcionou perfeitamente
public List<Usuario> listar() {
String jpql = "select u from Usuario u";
return manager.createQuery(jpql, Usuario.class).getResultList();
}
Vê se não é só adicionar o parametro Usuario.class depois da jpql
Fiz isso e continua o erro de Usuario is not Mapped
Vc conhece um bom padre q manje de exorcismos?
Como você configurou isso?
Rodrigo, Tô precisando mesmo kkk, o java anda me trollando muito
Criei com Jboss forge, e depois coloquei dependencias no maven, o persistence.xml tá com o nome da pizzaria-dev lá etc
Depois de tanto apanhar ACHEI O BENDITO ERRO
No persistence.xml resolveu colocando
br.com.pizzaria.models.Usuario
Que indica onde está a classe do meu Usuário! Obrigado por quem tentou me ajudar!!!