Olá pessoal,
Tenho uma dúvida em relação ao hibernate.
Criei minha classe Tarefa como um bean, fiz o mapeamento para o hibernate, utilzando Anotations, e conseguí gerar a tabela no banco de dados. Fiz o mesmo processo com minha classe Usuario, e tudo foi gerado com sucesso também.
Criei minhas classes DAO, a classe UsuarioDAO está funcionando sem problema nenhum, consigo adicionar sem problemas meus contatos.
O meu problema, é quando vou utilizar a classe TarefaDAO, o hibernate diz que não conhece a entidade. Porém acho estranho, visto que ele conseguiu criar a tabela no banco de dados.
Estou utilzando Hibernate + Struts2 no meu projeto.
Segue o erro:
org.hibernate.MappingException: Unknown entity: br.com.taskslist.bean.Tarefa
org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:628)
org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1366)
org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)
org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)
org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)
br.com.taskslist.dao.TarefaDAO.CadastraTarefa(TarefaDAO.java:19)
br.com.taskslist.action.CadastrarTarefaAction.cadastra(CadastrarTarefaAction.java:52)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:616)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
Tarefa Bean
package br.com.taskslist.bean;
import java.util.Calendar;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import com.sun.istack.internal.NotNull;
@Table(name="tb_tarefas")
@Entity
public class Tarefa {
@Id
@GeneratedValue
private Long codigo;
@NotNull
private String titulo;
private String descricao;
@NotNull
private Calendar dataFinal;
private long percentagemFinalizado;
private boolean finalizado;
private Calendar dataFinalizado;
private Long idUsuario;
public Long getIdUsuario() {
return idUsuario;
}
public void setIdUsuario(Long idUsuario) {
this.idUsuario = idUsuario;
}
public Long getCodigo() {
return codigo;
}
public void setCodigo(Long codigo) {
this.codigo = codigo;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Calendar getDataFinal() {
return dataFinal;
}
public void setDataFinal(Calendar dataFinal) {
this.dataFinal = dataFinal;
}
public long getPercentagemFinalizado() {
return percentagemFinalizado;
}
public void setPercentagemFinalizado(long percentagemFinalizado) {
this.percentagemFinalizado = percentagemFinalizado;
}
public boolean isFinalizado() {
return finalizado;
}
public void setFinalizado(boolean finalizado) {
this.finalizado = finalizado;
}
public Calendar getDataFinalizado() {
return dataFinalizado;
}
public void setDataFinalizado(Calendar dataFinalizado) {
this.dataFinalizado = dataFinalizado;
}
}
TarefaDAO
package br.com.taskslist.dao;
import java.util.List;
import org.hibernate.Session;
import br.com.taskslist.bean.Tarefa;
public class TarefaDAO {
private Session session;
public TarefaDAO(Session session)
{
this.session = session;
}
public void CadastraTarefa(Tarefa tarefa)
{
this.session.save(tarefa);
}
public List<Tarefa> ListaTarefas()
{
return this.session.createCriteria(Tarefa.class).list();
}
}
CadastrarTarefaAction (Servlet)
package br.com.taskslist.action;
import java.util.Calendar;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.hibernate.Session;
import br.com.taskslist.bean.Tarefa;
import br.com.taskslist.dao.TarefaDAO;
import br.com.taskslist.hibernate.HibernateUtil;
public class CadastrarTarefaAction
{
private Tarefa tarefa;
private String erroTitulo;
private String erroData;
@Action(value="CadastrarTarefa", results={
@Result(name="ok", location="/jsp/tarefa-cadastrada.jsp"),
@Result(name="erro", location="/jsp/cadastrar-tarefa.jsp")
})
public String cadastra()
{
Session session = new HibernateUtil().getSesstion();
TarefaDAO dao = new TarefaDAO(session);
boolean erro = false;
if(tarefa.getTitulo()== null || tarefa.getTitulo().isEmpty())
{
erroTitulo = "Título não deve ser deixado em branco";
erro = true;
}
if(tarefa.getDescricao() == null || tarefa.getDescricao().isEmpty())
{
tarefa.setDescricao("");
}
if(tarefa.getDataFinal() == null)
{
erroData = "Favor preencher a data corretamente";
erro = true;
}
if(erro)
return "erro";
tarefa.setFinalizado(false);
tarefa.setDataFinal(Calendar.getInstance());
tarefa.setPercentagemFinalizado((long)0);
session.beginTransaction();
dao.CadastraTarefa(tarefa);
//session.getTransaction().commit();
return "ok";
}
public Tarefa getTarefa() {
return tarefa;
}
public void setTarefa(Tarefa tarefa) {
this.tarefa = tarefa;
}
public String getErroTitulo() {
return erroTitulo;
}
public String getErroData() {
return erroData;
}
}
O que mais me surpreende é a parte de Usuário (bean, dao e action) estar funcionando sem problema nenhum.
Alguém tem alguma dica do que pode ser?