Duvida

1 resposta
Chaia

Bom dia

Sou iniciante no hibernate e estou com o seguinte erro.

javax.servlet.ServletException: object references an unsaved transient instance - save the transient instance before flushing: dominio.Documento

org.vraptor.VRaptorServlet.service(VRaptorServlet.java:95)

javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Já pesquisei no forum e falaram algo de usar o session.flush(); coloquei mas não adiantou.

Tenho o seguinte relacionamento entre as tabelas:

view plaincopy to clipboardprint?

  1. // Esta na Classe Documento
  2. @OneToMany(mappedBy=“documento”, fetch= FetchType.LAZY)
  3. @Cascade(CascadeType.ALL)
    
  4. private Collection<Visualizacao> visualizacao;
    
  5. //Esta na Classe Visualizacao
  6. @ManyToOne(fetch = FetchType.EAGER)
  7. @JoinColumn(name="cd_documento", insertable=true, updatable=true)
    
  8. @Fetch(FetchMode.JOIN)
    
  9. @Cascade(CascadeType.SAVE_UPDATE)
    
  10. private Documento documento;
    

// Esta na Classe Documento @OneToMany(mappedBy=“documento”, fetch= FetchType.LAZY) @Cascade(CascadeType.ALL) private Collection visualizacao; //Esta na Classe Visualizacao @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name=“cd_documento”, insertable=true, updatable=true) @Fetch(FetchMode.JOIN) @Cascade(CascadeType.SAVE_UPDATE) private Documento documento;

E os metodos que estão envolvidos são esses:

view plaincopy to clipboardprint?

  1. public void armazenaComentario (Comentario comentario) throws ServletException, IOException{
  2. this.daoFactory.beginTransaction();
    
  3. this.daoFactory.getComentarioDao().add(comentario);
    
  4. this.daoFactory.commit();
    
  5. this.request.getRequestDispatcher("documento.abrir.logic?documento.cdDocumento=1").forward(request, response);
    
  6. // Ate aqui funciona e envia para o metodo abaixo, quando o metodo abre é que ocorre o erro
    
  7. }
  8. public void visualDoc(Visualizacao visual){
  9. this.listaVisualizacao = this.daoFactory.getVisualizacaoDao().find("documento.cdDocumento",
    
  10. visual.getDocumento().getCdDocumento());
    
  11. }
    

1 Resposta

Chaia

[quote=Chaia]Bom dia

Sou iniciante no hibernate e estou com o seguinte erro.

javax.servlet.ServletException: object references an unsaved transient instance - save the transient instance before flushing: dominio.Documento

org.vraptor.VRaptorServlet.service(VRaptorServlet.java:95)

javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Já pesquisei no forum e falaram algo de usar o session.flush(); coloquei mas não adiantou.

Tenho o seguinte relacionamento entre as tabelas:

view plaincopy to clipboardprint?

@OneToMany(mappedBy="documento", fetch= FetchType.LAZY)  
        @Cascade(CascadeType.ALL)  
        private Collection<Visualizacao> visualizacao;  
   
       //Esta na Classe Visualizacao  
      
           @ManyToOne(fetch = FetchType.EAGER)  
            @JoinColumn(name="cd_documento", insertable=true, updatable=true)  
           @Fetch(FetchMode.JOIN)  
           @Cascade(CascadeType.SAVE_UPDATE)  
       private Documento documento;  

// Esta na Classe Documento 
@OneToMany(mappedBy="documento", fetch= FetchType.LAZY)
 @Cascade(CascadeType.ALL) private Collection<Visualizacao> visualizacao; 

//Esta na Classe Visualizacao 
@ManyToOne(fetch = FetchType.EAGER) 
@JoinColumn(name="cd_documento", insertable=true, updatable=true)
@Fetch(FetchMode.JOIN) 
@Cascade(CascadeType.SAVE_UPDATE) private Documento documento;

E os metodos que estão envolvidos são esses:

public void armazenaComentario (Comentario comentario) throws ServletException, IOException{  
              
            this.daoFactory.beginTransaction();  
              
            this.daoFactory.getComentarioDao().add(comentario);  
            this.daoFactory.commit();  
              
            this.request.getRequestDispatcher("documento.abrir.logic?documento.cdDocumento=1").forward(request, response);  
                  // Ate aqui funciona e envia para o metodo abaixo, quando o metodo abre é que ocorre o erro  
 
     public void visualDoc(Visualizacao visual){  
           this.listaVisualizacao = this.daoFactory.getVisualizacaoDao().find("documento.cdDocumento",   
                   visual.getDocumento().getCdDocumento());  
       }
Criado 27 de março de 2009
Ultima resposta 27 de mar. de 2009
Respostas 1
Participantes 1