Boa Tarde pessoal, estou apredendo Hibernate+JSF e neste projeto nao consigo salvar os dados no banco. Consigo navegar entre as paginas perfeitamente, e quando clico em salvar(na tela de cadastro Professores), é redirecionado para a tela de exibição(tabela) como esperado, porem os dados não sao gravados no banco, na tela de exibição mostra apenas a linha refente ao cadastro anteriores(inclusive com o ID auto-incrementado), porem se eu voltar a exibir ja aparece em branco novamente.
E a seguinte exceçao eh lançada:
org.hibernate.TransactionException: nested transactions not supported)
Em outros topicos achei que o problema esta no Hibernate 4, nao aceita trnsaçoes “aninhadas”. Como nao quero retroagir a versão do Hibernate, alguem consegue me dar um exemplo de como usar outro tipo de transação sem alterar muito o codigo? Obrigado desde já.
log completo da exceçao:
org.hibernate.TransactionException: nested transactions not supported
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:152)
at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1363)
at br.com.dao.DAO.rollback(DAO.java:51)
at br.com.dao.ProfessorDAO.salvar(ProfessorDAO.java:17)
at br.com.controller.ControllerProf.salvar(ControllerProf.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:264)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:70)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
-------Tela de requisição formprof.jsp
[code]
Cadastro de Professores[/code]
—ManagedBean ProfessorControl (ControllerProf.Java)
[code]public class ControllerProf {
private Professor professor;
//private DataModel model;
private Map<String, Object> categoriaitem=null;
public Professor getProfessor() {
return professor;
}
public void setProfessor(Professor professor) {
this.professor = professor;
}
public Map<String, Object> getCategoriaitem() {
return categoriaitem;
}
public void setCategoriaitem(Map<String, Object> categoriaitem) {
this.categoriaitem = categoriaitem;
}
public ControllerProf(){
professor = new Professor();
}
public String salvar(){
ProfessorDAO profdao = new ProfessorDAO();
profdao.salvar(professor);
return "salvar";
}
public List<Professor> getTodos(){
ProfessorDAO profdao = new ProfessorDAO();
ArrayList<Professor> list = new ArrayList<Professor>(profdao.todosProfs());//(profdao.todosProfs());
return list;
}
public Map<String, Object> getCategorias(){
ProfessorDAO profdao = new ProfessorDAO();
categoriaitem = new LinkedHashMap<String, Object>();
for (Iterator iter = profdao.todosProfs().iterator();iter.hasNext();){
Professor p = (Professor) iter.next();
categoriaitem.put(p.getNome(), p.getNome());
}
return categoriaitem;
}
public String novocadastro(){
professor = new Professor();
return "novo";
}
}[/code]
—ProfessorDAO.java
[code]public class ProfessorDAO extends DAO {
public void salvar(Professor professor){
try{
begin();
getSession().save(professor);
commit();
}catch (HibernateException e) {
rollback();
}
}
public List todosProfs(){
List list = getSession().createQuery("from Professor").list();
return list;
}
}[/code]
—Tela de Exibição(mostraprofs.jsp)
[code]
Exibição de Professores [/code]Essa aí, qualquer ajuda será bem vinda. Alguem?
