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

5 respostas
cnunes

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???

5 Respostas

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.

Kleber-rr
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.

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:
@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;
@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;
Estou tentando utilizar o selectManyListbox da seguinte forma:
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<SelectItem> getRespostasPergunta1() {
		Session session = HibernateUtil.currentSession();
		RespostasDao dao = new RespostasDao(session, Respostas.class);
		List<Respostas> respostas = dao.getRespostasByPergunta1(new Long(1));
		List<SelectItem> items = new ArrayList<SelectItem>(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);

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

Kleber-rr

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.

viniciuspadua

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

Kleber-rr
viniciuspadua:
Kleber-rr, estou com o mesmo problema, como resolveu ?
Cara, era só dar um for para salvar mais de um iten do select:
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";
	}
Boa Sorte.
Criado 31 de março de 2009
Ultima resposta 1 de mar. de 2010
Respostas 5
Participantes 3