[RESOLVIDO] Hibernate Annotations: "No row with the given identifier exists"?

Boa tarde amigos,

Possuo 2 tabelas nota e nota_referencia, na qual a PK de nota é PFK de nota_referencia (a PK tb possui outros atributos).
Ao listar os registros da tabela nota_referencia, recebo o erro dizendo que nenhum registro foi encontrado com a PK repassada.
Acho q estou mapeando alguma coisa de forma errada.

Segue abaixo a mensagem de erro retornada e os meus mapeamentos:

Mensagem de erro:

org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [modelo.Nota#modelo.NotaPK@1bdb58]
        at org.hibernate.impl.SessionFactoryImpl$1.handleEntityNotFound(SessionFactoryImpl.java:377)
        at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:145)
        at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:195)
        at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103)
        at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
        at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:846)
        at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:557)
        at org.hibernate.type.EntityType.resolve(EntityType.java:379)
        at org.hibernate.type.ComponentType.resolve(ComponentType.java:584)
        at org.hibernate.type.ComponentType.nullSafeGet(ComponentType.java:275)
        at org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1097)
        at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:565)
        at org.hibernate.loader.Loader.doQuery(Loader.java:701)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
        at org.hibernate.loader.Loader.doList(Loader.java:2220)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
        at org.hibernate.loader.Loader.list(Loader.java:2099)
        at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
        at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
        at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)

classe nota:

@Entity
@Table(name = "nota")
public class Nota implements Serializable {

    @EmbeddedId
    private NotaPK notaPK;

    @Column(name="tur", length = 5)
    private String turma;

    @Column(name="np1", length = 3)
    private String notaP1;

    @Column(name="np2", length = 3)
    private String notaP2;

    @Column(name="nm1", length = 3)
    private String notaMedia1;

    @OneToMany(mappedBy="notaReferenciaPK.nota", fetch = FetchType.LAZY)
    @Cascade(CascadeType.ALL)
    private List<NotaReferencia> listaNotaReferencia;

    //Gets e Sets
}

classe notaPK:

@Embeddable
public class NotaPK implements Serializable {

    @ManyToOne
    @JoinColumns({
        @JoinColumn(name = "mat", referencedColumnName = "mat"),
        @JoinColumn(name = "sit", referencedColumnName = "sit"),
        @JoinColumn(name = "sec", referencedColumnName = "sec")
    })
    private Aluno aluno;    

    @Column(name="gra", length = 1, unique = true, nullable = false)
    private String grau;

    @Column(name="cso", length = 2, unique = true, nullable = false)
    private String curso;

    @Column(name="ser", length = 1, unique = true, nullable = false)
    private String serie;

    @OneToOne
    @JoinColumn(name="dis", nullable=false, unique=true)
    private Disciplina disciplina;

    @Column(name="std", length = 1, unique = true, nullable = false, insertable = true, updatable = true)
    private String statusDependencia;


    //Métodos getters e setters
}

classe notaReferencia:

@Entity
@Table(name = "nota_ref")
public class NotaReferencia implements Serializable {

    @EmbeddedId
    private NotaReferenciaPK notaReferenciaPK;

    @Column(name="tur", length = 5)
    private String turma;

    @Column(name="np1", length = 3)
    private String notaP1;

    @Column(name="np2", length = 3)
    private String notaP2;

    @Column(name="nm1", length = 3)
    private String notaMedia1;

    //Gets e sets
}

classe notaReferenciaPK:

@Embeddable
public class NotaReferenciaPK implements Serializable {

    @Column(name="ref", length = 3, unique = true, nullable = false)
    private String notaRef;

    @ManyToOne
    @JoinColumns({
        @JoinColumn(name = "mat", referencedColumnName = "mat"),
        @JoinColumn(name = "sit", referencedColumnName = "sit"),
        @JoinColumn(name = "sec", referencedColumnName = "sec"),
        @JoinColumn(name = "cso", referencedColumnName = "cso"),
        @JoinColumn(name = "dis", referencedColumnName = "dis"),
        @JoinColumn(name = "gra", referencedColumnName = "gra"),
        @JoinColumn(name = "ser", referencedColumnName = "ser"),
        @JoinColumn(name = "std", referencedColumnName = "std")
    })
    private Nota nota;

    
    //Métodos getters e setters
}

Alguém sabe o que pode estar errado???

O problema estava na base de dados.
Realmente não existia o registro referente a PK. :lol:

Agradeço a atenção de todos.

[quote=cnunes]O problema estava na base de dados.
Realmente não existia o registro referente a PK. :lol:

Agradeço a atenção de todos.[/quote]

Olá cnunes, td bem?? preciso de uma ajuda sua… estou tendo o mesmo erro que vc teve conforme abaixo:

org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [br.gov.rr.setrabes.estrutura.Respostas#2] org.hibernate.impl.SessionFactoryImpl$1.handleEntityNotFound(SessionFactoryImpl.java:377) org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:145) org.hibernate.event.def.DefaultLoadEventListener.returnNarrowedProxy(DefaultLoadEventListener.java:221) org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:187) org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103) org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878) org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:846) org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:557) org.hibernate.type.EntityType.resolve(EntityType.java:379) org.hibernate.type.EntityType.replace(EntityType.java:259) org.hibernate.type.AbstractType.replace(AbstractType.java:153) org.hibernate.type.TypeFactory.replace(TypeFactory.java:515) org.hibernate.event.def.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:377) org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:179) org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:123) org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:53) org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:677) org.hibernate.impl.SessionImpl.merge(SessionImpl.java:661) org.hibernate.impl.SessionImpl.merge(SessionImpl.java:665) br.gov.rr.setrabes.dao.Dao.merge(Dao.java:43) br.gov.rr.setrabes.handler.QuestionarioHandler.salva(QuestionarioHandler.java:131) 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) org.apache.el.parser.AstValue.invoke(AstValue.java:172) org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.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) org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:186) org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:164) org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:352) 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.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:307) org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141) org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281) br.gov.rr.setrabes.util.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:23)

Minhas classes estao assim:

[code]@Entity
@Table(name = “questionario”)
public class Questionario {

@Id
@GeneratedValue
@Column(name = "cod_questionario")
private Long cod_questionario;

@ManyToOne
@JoinColumn(name = "cod_orgaogestor")
private OrgaoGestor orgaogestor;

@ManyToOne
@JoinColumn(name = "codRespostas")
private Respostas resposta;

[/code]

[code]@Entity
@Table(name = “resposta”)
public class Respostas {

@Id
@GeneratedValue
@Column(name = "codRespostas")
private Long codRespostas;
private String descricao;
private String resposta_complemento;
private Boolean marcar;

@ManyToOne
@JoinColumn(name = "pergunta")
private Perguntas pergunta;

[/code]

Estou tentando utilizar o selectManyListbox da seguinte forma:

[code]public class QuestionarioHandler {

private Questionario questionario = new Questionario();
private Questionario questionario2 = new Questionario();
private Perguntas pergunta = new Perguntas();
private Respostas resposta = new Respostas();
private OrgaoGestor orgaogestor = new OrgaoGestor();
private List<SelectItem> orgaogestores = new ArrayList<SelectItem>();
private HtmlSelectOneMenu orgaogestorSelecionado = new HtmlSelectOneMenu();
private String[] respostasSelecionadas;

//getters e setters…
public List getRespostasPergunta1() {
Session session = HibernateUtil.currentSession();
RespostasDao dao = new RespostasDao(session, Respostas.class);
List respostas = dao.getRespostasByPergunta1(new Long(1));
List items = new ArrayList(respostas.size());
for (Respostas r : respostas) {
items.add(new SelectItem(r.getCodRespostas(), r.getDescricao()));
}
return items;

}
public String salva() {

	Session session = HibernateUtil.currentSession();
	Dao<Questionario> dao = new Dao<Questionario>(session,
			Questionario.class);
	Dao<OrgaoGestor> ogDao = new Dao<OrgaoGestor>(session,
			OrgaoGestor.class);
	Dao<Respostas> respostasDao = new Dao<Respostas>(session,
			Respostas.class);

	// orgaogestor
	Long id_orgaogestor1 = Long.valueOf(orgaogestorSelecionado.getValue()
			.toString());
	OrgaoGestor og1 = ogDao.load(id_orgaogestor1);
	questionario.setOrgaogestor(og1);
	// respostas1
	Long id_respostas1 = Long.valueOf(respostasSelecionadas.length);
	Respostas r1 = respostasDao.load(id_respostas1);
	questionario.setResposta(r1);

[/code]

O que pode estar errado?? será q o mapeamento entre questionario e respostas deve ser bidirecional??
Se puder ajudar, agradeço.

Olá cnunes, resolvi o erro… realmente o relacionamento tinha q ser bidirecional…
Só que por mais q eu selecione mais de um item no selectManyListbox, eu só consigo salvar um item no banco… deve ser meu relacionamento…
Agradeço a ajuda.

Kleber-rr, estou com o mesmo problema, como resolveu ?

Cara, era só dar um for para salvar mais de um iten do select:

[code]public String salva() {

	Session session = HibernateUtil.currentSession();
	Dao<Questionario> dao = new Dao<Questionario>(session,
			Questionario.class);
	Dao<OrgaoGestor> ogDao = new Dao<OrgaoGestor>(session,
			OrgaoGestor.class);
	Dao<Respostas> respostasDao = new Dao<Respostas>(session,
			Respostas.class);

	// orgaogestor
	Long id_orgaogestor1 = Long.valueOf(orgaogestorSelecionado.getValue()
			.toString());
	OrgaoGestor og1 = ogDao.load(id_orgaogestor1);
	// respostas1
	for (String resposta : respostasSelecionadas) {
		Respostas r1 = respostasDao.load(Long.parseLong(resposta));
		questionario.setResposta(r1);
		questionario.setOrgaogestor(og1);
		dao.merge(this.questionario);
		questionario = new Questionario();
	}
	return "sucesso";
}

[/code]
Boa Sorte.