Boa noite amigos, Meu nome é rodrigo, estou aprendendo a mexer com jpa, entao começei tentando fazer um cadastro de controle de ligações:
primeiro criei um banco no MySQL chamado telefonemas, neste banco eu tenho uma tabela com as colunas, usuario (PK), login, senha, nome.
Bom agora estou tentando fazer a validação do usuario pra poder acessar minha aplicação, pra isso preciso acessar meu banco.
para começar a mexer com o banco, primeiro eu usei o assistente do netbeans para montar o persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="TelefonemasWebPU" transaction-type="RESOURCE_LOCAL">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<properties>
<property name="toplink.jdbc.user" value="root"/>
<property name="toplink.jdbc.password" value="root"/>
<property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/telefonemas"/>
<property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="toplink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>
depois o nb parece que ja pegou minha tabela e criou um arquivo .dbschema, e varios outros arquivos…
um outro arquivo que foi criado, é o Usuario.java:
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
/**
*
* @author Rodrigo
*/
@Entity
@Table(name = "usuario")
@NamedQueries({@NamedQuery(name = "Usuario.findByUsuario", query = "SELECT u FROM Usuario u WHERE u.usuario = :usuario"), @NamedQuery(name = "Usuario.findByLogin", query = "SELECT u FROM Usuario u WHERE u.login = :login"), @NamedQuery(name = "Usuario.findBySenha", query = "SELECT u FROM Usuario u WHERE u.senha = :senha"), @NamedQuery(name = "Usuario.findByNome", query = "SELECT u FROM Usuario u WHERE u.nome = :nome")})
public class Usuario implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "USUARIO", nullable = false)
private Integer usuario;
@Column(name = "LOGIN", nullable = false)
private String login;
@Column(name = "SENHA", nullable = false)
private String senha;
@Column(name = "NOME", nullable = false)
private String nome;
public Usuario() {
}
public Usuario(Integer usuario) {
this.usuario = usuario;
}
public Usuario(Integer usuario, String login, String senha, String nome) {
this.usuario = usuario;
this.login = login;
this.senha = senha;
this.nome = nome;
}
public Integer getUsuario() {
return usuario;
}
public void setUsuario(Integer usuario) {
this.usuario = usuario;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Override
public int hashCode() {
int hash = 0;
hash += (usuario != null ? usuario.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Usuario)) {
return false;
}
Usuario other = (Usuario) object;
if ((this.usuario == null && other.usuario != null) || (this.usuario != null && !this.usuario.equals(other.usuario))) {
return false;
}
return true;
}
@Override
public String toString() {
return "br.com.chart.persistencia.Usuario[usuario=" + usuario + "]";
}
}
feito isso eu precisei criar um metodo que fizesse a consulta no banco de acordo com os dados que foram inseridos no formulario da web, login e senha.
Metodo valida Login:
public boolean validaLogin() {
Usuario user = new Usuario();
EntityManagerFactory emf = Persistence.createEntityManagerFactory("TelefonemasWebPU");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
// user.setLogin(this.usuarioBean.getLogin());
//user.setSenha(this.usuarioBean.getSenha());
try {
Query verifica = em.createQuery(" from usuario u where u.login= ?1 and u.senha= ?2");
verifica.setParameter(1, this.usuarioBean.getLogin());
verifica.setParameter(2, this.usuarioBean.getSenha());
verifica.getResultList();
System.out.print(verifica.getResultList());
} catch (EntityNotFoundException notFound) {
} catch (NonUniqueResultException nonUnique) {
}
return false;
}
nesse codigo eu usei uma classe chamada UsuarioBean, porque eu achei que seria mais simples preu soh pegar os valores que vem do meu formulario, no caso login e senha.
Neste momento nao estou muito interessado no que ele vai me retornar, pelo menos por enquanto, meu problema mesmo e é minha EJB QL, não esta sendo reconhecida,
pois dentre os erros que o tomcat me retorna este esta dificil pra mim resolver:
Exception [TOPLINK-8025] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.EJBQLException
Exception Description: Syntax error parsing the query [from usuario u where u.login= ?1 and u.senha= ?2], line 1, column 1: unexpected token [from].
Internal Exception: line 1:1: unexpected token: from
oracle.toplink.essentials.exceptions.EJBQLException.unexpectedToken(EJBQLException.java:389)
oracle.toplink.essentials.internal.parsing.ejbql.EJBQLParser.handleANTLRException(EJBQLParser.java:350)
oracle.toplink.essentials.internal.parsing.ejbql.EJBQLParser.addError(EJBQLParser.java:278)
oracle.toplink.essentials.internal.parsing.ejbql.EJBQLParser.reportError(EJBQLParser.java:378)
oracle.toplink.essentials.internal.parsing.ejbql.antlr273.EJBQLParser.document(EJBQLParser.java:156)
oracle.toplink.essentials.internal.parsing.ejbql.EJBQLParser.parse(EJBQLParser.java:166)
oracle.toplink.essentials.internal.parsing.ejbql.EJBQLParser.buildParseTree(EJBQLParser.java:127)
oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:215)
oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:189)
oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:153)
oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.(EJBQueryImpl.java:114)
oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.(EJBQueryImpl.java:99)
oracle.toplink.essentials.internal.ejb.cmp3.EJBQueryImpl.(EJBQueryImpl.java:86)
oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.createQuery(EntityManagerImpl.java:204)
br.com.chart.Beans.BuscaUsuario.BuscaUsuario.validaLogin(BuscaUsuario.java:57)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.el.parser.AstValue.invoke(AstValue.java:152)
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
javax.faces.component.UICommand.broadcast(UICommand.java:383)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
Eu coloquei a EJB QL assim direto com o from, sem o select, porque no exemplo do livro que estou lendo, Enterprise Java Beans 3.0 - O’RELLY, o exemplo esta assim, e eu nao consigo ver onde estou errando. Sera que algum poderia me ajudar?
OBS: peço desculpas pelo tamanho do topico, mas ainda sou iniciante e queria ilutrar bem o meu problema.
Valeu Pessoal.