DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
David de Amorim Cortez
 


País: Brasil
Estado: RJ
Cidade: são joão meriti
Mensagens: 8
 Postado em: 2/2/2011 08:33:27 AM
 
Bom dia to ha um tempo batalhando com esse erro. 

Se senhores poderem me ajudar 
Eu cadastro a Disciplina na boa, mas quando tento cadastrar a dos Cursos, eo formulario do curso tem uma lista de Disciplina da esse erro, as duas estão mapeadas. 

 


[CODE]
Hibernate: 
    select
        disciplina0_.idDisciplina as idDiscip1_0_,
        disciplina0_.nome as nome0_ 
    from
        Disciplina disciplina0_
Hibernate: 
    select
        curso0_.idCurso as idCurso1_0_,
        disciplina1_.idDisciplina as idDiscip1_0_1_,
        curso0_.descricao as descricao1_0_,
        curso0_.idDisciplina as idDiscip5_1_0_,
        curso0_.duracao as duracao1_0_,
        curso0_.nome as nome1_0_,
        disciplina1_.nome as nome0_1_ 
    from
        Curso curso0_ 
    inner join
        Disciplina disciplina1_ 
            on curso0_.idDisciplina=disciplina1_.idDisciplina
Hibernate: 
    insert 
    into
        Curso
        (descricao, idDisciplina, duracao, nome) 
    values
        (?, ?, ?, ?)
02/02/2011 08:15:16 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [default] in context with path [/curso] threw exception [java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.com.curso.beans.Curso.disciplina -> br.com.curso.beans.Disciplina] with root cause
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.com.curso.beans.Curso.disciplina -> br.com.curso.beans.Disciplina
at org.hibernate.engine.CascadingAction$9.noCascade(CascadingAction.java:387)
at org.hibernate.engine.Cascade.cascade(Cascade.java:172)
at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:154)
at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:145)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:88)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:795)
at br.com.curso.DAO.CursoImpl.adciona(CursoImpl.java:26)
at br.com.curso.action.CursoAction.SaveCurso(CursoAction.java:41)
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 com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:184)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:121)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:422)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

[/CODE]


AS ENTIDADES

[CODE]
package br.com.curso.beans;

import java.io.Serializable;


import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;

@NamedQueries({
@NamedQuery(name = "getCurso.Discplina", query = "select c from Curso c inner join fetch c.disciplina where c.nome like ?1"),
@NamedQuery(name = "getCurso.Prepara", query = "select c from Curso c inner join fetch c.disciplina")

})
@Entity
public class Curso implements Serializable {

private static final long serialVersionUID = 1166401819028622455L;

@Id
@GeneratedValue
private Long idCurso;

private String nome;

private String descricao;

private int duracao;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "idDisciplina",referencedColumnName="idDisciplina")
private Disciplina disciplina;

public Disciplina getDisciplina() {
return disciplina;
}

public void setDisciplina(Disciplina disciplina) {
this.disciplina = disciplina;
}

public Long getIdCurso() {
return idCurso;
}

public void setIdCurso(Long idCurso) {
this.idCurso = idCurso;
}

public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

public String getDescricao() {
return descricao;
}

public void setDescricao(String descricao) {
this.descricao = descricao;
}

public int getDuracao() {
return duracao;
}

public void setDuracao(int duracao) {
this.duracao = duracao;
}

@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
return super.equals(obj);
}
}

[/CODE]

[CODE]
package br.com.curso.beans;

import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;

@NamedQueries({
@NamedQuery(name = "getDisciplina", query = "select d from Disciplina d inner join fetch d.cursos as c where c.nome like ?1 "),
@NamedQuery(name = "getDisciplina_Curso", query = "select d from Disciplina d inner join fetch d.cursos as c ") 
})
@Entity
public class Disciplina {

@Id
@GeneratedValue
private Long idDisciplina;

private String nome;

@OneToMany(cascade = { CascadeType.ALL}, mappedBy = "disciplina",fetch=FetchType.LAZY)
private Set<Curso> cursos = new HashSet<Curso>();
public Set<Curso> getCursos() {
return cursos;
}

public void setCursos(Set<Curso> cursos) {
this.cursos = cursos;
}

public Long getIdDisciplina() {
return idDisciplina;
}

public void setIdDisciplina(Long idDisciplina) {
this.idDisciplina = idDisciplina;
}

public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

}


[/CODE]

IMPL

[CODE]
@Override
public void adciona(Curso curso) {
EntityManager em = (EntityManager) JPAUtil.getInstance()
.createEntityManager();
if(em.getTransaction().isActive()) {
em.flush();
em.persist(curso);
em.flush();
em.getTransaction().commit();
}else {
em.getTransaction().begin();
em.flush();
em.persist(curso);
em.flush();
em.getTransaction().commit();
}
}

[/CODE]

ACTION

[CODE]
public String SaveCurso() {
CursoImpl cursoImpl = new CursoImpl();
if(curso.getIdCurso()!=null){
curso.setDisciplina(disciplina);
cursoImpl.update(curso);
}
curso.setDisciplina(disciplina);
cursoImpl.adciona(curso);
return "Save";
}

[/CODE]

Davi Gomes da Costa
 

 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 2/2/2011 09:02:48 AM
 
Vc vai ter que fazer uma verificação( if) para ver se a disciplina é ativa antes de salvar o curso.
Se n for ativa vc pega o id da disciplina e recupera do banco. Simples simples

Só mais um toke:

public String SaveCurso() {
CursoImpl cursoImpl = new CursoImpl();
if(curso.getIdCurso()!=null){
curso.setDisciplina(disciplina);
cursoImpl.update(curso);
}
curso.setDisciplina(disciplina);
cursoImpl.adciona(curso);
return "Save";
}

Vc atualiza o registro se ele já existir no banco e adiciona denovo???
Que tal se ficasse assim:

public String SaveCurso() {
CursoImpl cursoImpl = new CursoImpl();
curso.setDisciplina(disciplina);
                if(curso.getIdCurso()!=null){
cursoImpl.update(curso);
}else{
     cursoImpl.adciona(curso);
                }
return "Save";
}

Att Davi

David de Amorim Cortez
 


País: Brasil
Estado: RJ
Cidade: são joão meriti
Mensagens: 8
 Postado em: 2/2/2011 09:14:57 AM
 
Eu Debuguei o Código eu vi que o idDisciplina ta vindo null

o código da jsp é esse tem alguma coisa errada.

[CODE]
<s:form action="cadastraCurso">

<legend>Curso</legend>
<div>
<label><s:textfield name="curso.nome" label="nome"></s:textfield></label>
</div>
<div>
<label><s:textfield name="curso.descricao" label="Descrição"></s:textfield></label>
</div>
<div>
<label><s:textfield name="curso.duracao" label="Duração"></s:textfield></label>
</div>

<div>
<label><s:select label="Disciplina" name="curso.disciplina.idDisciplina" list="disciplinas" listValue="nome" listKey="idDisciplina"/> </label>
</div>

<s:submit type="submit" id="submit-go">Cadastra</s:submit>
<s:actionmessage />

[/CODE]
David de Amorim Cortez
 


País: Brasil
Estado: RJ
Cidade: são joão meriti
Mensagens: 8
 Postado em: 2/2/2011 10:01:58 AM
 
Resolvi o Problema esta na pagina, e alterei o código da action como o amigo disse

Vlw Pela ajuda


JSP fico assim

[CODE]
<s:form action="cadastraCurso.action" validate="true">
<s:textfield name="curso.nome" label="Nome"></s:textfield>
<s:textfield name="curso.descricao" label="Decrição"></s:textfield>
<s:textfield name="curso.duracao" label="Duração"/>
<s:select label="Disciplina" name="curso.disciplina.idDisciplina" list="disciplinas" listValue="nome" listKey="idDisciplina"/>
<s:submit value="Gravar"

[/CODE]
DYEGO SOUZA DO CARMO
 

 


País: Brasil
Estado: PR
Cidade: xxxxx
Mensagens: 1836
 Postado em: 11/2/2011 05:35:36 PM
 
Voce pode utilizar a parte de CASCADE.ALL do @ManyTone , vai funciona tmb :)

web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03