Olá galera,
Estou estudando JSF + Hibernate e até o ponto no qual eu gravava uma tabela somente corria tudo bem, mas quando tive de usar tabelas relacionadas com @Annotation comecei a ter problemas.
Entity Usuario:[code]@Entity
public class Usuario implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int codUsuario;
private int num;
private String nome;
private String sobrenome;
private String cpf;
private String sexo;
private String tel;
private String cel;
private String rua;
private String bairro;
private String compl;
private String cidade;
private String uf;
private String cep;
//
@Temporal(javax.persistence.TemporalType.DATE)
private Date nascimento;
//
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = “codLogin”)
private Login login;
//
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = “codUserInfo”)
private UsuarioInfo usuarioInfo;
// getters and setters[/code]
Entity Login:[code]@Entity
public class Login implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int codLogin;
private String usuario;
private String senha;
private String email;
private String tipo;[/code]
Entity UsuarioInfo:[code]@Entity
public class UsuarioInfo implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int codUserInfo;
private int qtdFilme;
private int ptPositivo;
private int ptNeutro;
private int ptNegativo;
private int qtdTopico;
private int qtdMsg;
private String avatar;
@Temporal(javax.persistence.TemporalType.DATE)
private Date dataCadastro;
@Temporal(javax.persistence.TemporalType.DATE)
private Date dataVisita;
private Time horaVisita;
private boolean disponivel;
private boolean travado;[/code]
Controller UsuarioApl:[code]public class UsuarioApl {
private Usuario usuario;
private UsuarioDao usuarioDao;
public String novoUsuario() {
usuario = new Usuario();
return “novoUsuario”;
}
public String cadastrar() {
System.out.println("Nome: " + usuario.getNome());
usuarioDao.cadastrar(usuario);
return “cadastrado”;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
}[/code]
Dao UsuarioDao:[code]public class UsuarioDao implements Dao {
private Session session;
private Transaction tx = null;
public void cadastrar(Object obj) {
session = HibernateUtil.getSession();
try {
tx = session.beginTransaction();
session.save(obj);
tx.commit();
} catch (Exception e) {
System.out.println("[UsuarioDao.cadastrar] Erro: " + e.toString());
tx.rollback();
} finally {
session.flush();
session.close();
}
}
public void alterar(Object obj) {
throw new UnsupportedOperationException(“Not supported yet.”);
}
public void remover(Object obj) {
throw new UnsupportedOperationException(“Not supported yet.”);
}
public Object consultar(Object obj) {
throw new UnsupportedOperationException(“Not supported yet.”);
}
public List<?> listar(int max, int atual) {
throw new UnsupportedOperationException(“Not supported yet.”);
}
}[/code]
Dúvidas:
- No início estava acusando de nullpoint no Login e no UsuarioInfo, pois eles não tinha sido istânciados. Mas realmente não, pois eles são apenas declarados na classe e só istancio o Usuario quando executo o método novo(). Eu devo istanciar as outras classes direto em vez de só private Login login; ?
org.apache.jasper.el.JspPropertyNotFoundException: /salvarUsuario.jsp(17,10) '#{usuarioApl.usuario.usuarioInfo.avatar}' Target Unreachable, 'usuarioInfo' returned null
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "codUserInfo")
private UsuarioInfo usuarioInfo = new UsuarioInfo();
ou
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "codUserInfo")
private UsuarioInfo usuarioInfo;
-
Quando eu uso @JoinColumn e mappedBy?
-
Em UsuarioDao eu posso passar pro save o Object mesmo ou tenho de fazer um case para Usuario?
-
E por fim, como com certeza estou fazendo errado, esta dando nullpoint no método cadastrar:
[code]HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: #{usuarioApl.cadastrar}: java.lang.NullPointerException
javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
root cause
javax.faces.FacesException: #{usuarioApl.cadastrar}: java.lang.NullPointerException
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:107)
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)
root cause
javax.faces.el.EvaluationException: java.lang.NullPointerException
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:91)
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)
root cause
java.lang.NullPointerException
com.moviecollection.controller.UsuarioApl.cadastrar(UsuarioApl.java:24)
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:172)
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)[/code]
Se alguém puder me ajudar, ficarei muito grato. Obrigado pessoal.