JPA Erro - ERRO NOVO (2)

12 respostas
D

Galera, boa noite!

Bom, estou estudando JPA + HIBERNATE, através de video aulas, e tive um problema:

Inicialmente ao criar o projeto optei por JAVA PROJECT, e foi tudo bem, porem ao fazer a persistencai de leitura, ele deu problema, pq o persistence.xml estava fora do META-INF, ai migrei o projeto para JPA PROJECT ( USO ECLIPSE ), e foi tudo bem…

Porem, neste momento, o V.O. People que eu uso, acusou um erro na @Entity.

O estranho é q mesmo com linha de error ele rola normalmente…

Vejam a classe:

package br.com.jpa.entity;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity(name="People")
public class People implements Serializable{
	
	private static final long serialVersionUID = 1L;
	
	public People() {
	}
	
	@Id
	@Column(nullable=false,name="ID")
	@GeneratedValue(strategy=GenerationType.AUTO)
	private Integer id;
	@Column(nullable=false,name="NAME")
	private String name;
	@Column(nullable=false,name="AGE")
	private Integer age;
	

	public People(Integer id, String name, Integer age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((age == null) ? 0 : age.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		People other = (People) obj;
		if (age == null) {
			if (other.age != null)
				return false;
		} else if (!age.equals(other.age))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}

	
}

Acusa erro na linha:

Erro: Table “People” cannot be resolved ~ ou algo assim!

Alguma idéia?

Vlw!!!

12 Respostas

rodrigo.ferreira

Amigo, boa noite!

Você provavelmente não tem uma tabela chamada “People” (considere o case sensitive).

Você deve adicionar mais uma anotação aí, depois de “@Entity(name=“People”)” e antes da definição da classe… ficaria assim:

//...
import javax.persistence.Id;  
  
@Entity
@Table(name="nome_da_tabela") // substitua "nome_da_tabela" pelo nome da tabela real... (considere CaseSensitive)
public class People implements Serializable{

Se você não colocar a anotação “@Table”, o JPA tenta encontrar uma tabela com o mesmo nome da classe… e caso não encontre, você tem essa mensagem de erro.

Espero ter ajudado!

Abraço,

D

Então, só se as annotations da video-aula pras que eu estou usando (3.6.0) mudaram, pq na video-aula ele não coloca e nem cita nada sobre essa annotation @table!

E o mais estranho, é que Funciona normalmente o código, só que fica marcado como ERRO!

Irei tentar colocar isso, quando chegar em casa, e depois posto o resultado, anyway, vlw!!!

eberson_oliveira

Duzas87:
Galera, boa noite!

Bom, estou estudando JPA + HIBERNATE, através de video aulas, e tive um problema:

Inicialmente ao criar o projeto optei por JAVA PROJECT, e foi tudo bem, porem ao fazer a persistencai de leitura, ele deu problema, pq o persistence.xml estava fora do META-INF, ai migrei o projeto para JPA PROJECT ( USO ECLIPSE ), e foi tudo bem…

Porem, neste momento, o V.O. People que eu uso, acusou um erro na @Entity.

O estranho é q mesmo com linha de error ele rola normalmente…

Vejam a classe:

package br.com.jpa.entity;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity(name="People")
public class People implements Serializable{
	
	private static final long serialVersionUID = 1L;
	
	public People() {
	}
	
	@Id
	@Column(nullable=false,name="ID")
	@GeneratedValue(strategy=GenerationType.AUTO)
	private Integer id;
	@Column(nullable=false,name="NAME")
	private String name;
	@Column(nullable=false,name="AGE")
	private Integer age;
	

	public People(Integer id, String name, Integer age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((age == null) ? 0 : age.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		People other = (People) obj;
		if (age == null) {
			if (other.age != null)
				return false;
		} else if (!age.equals(other.age))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}

	
}

Acusa erro na linha:

Erro: Table “People” cannot be resolved ~ ou algo assim!

Alguma idéia?

Vlw!!!

Olá Duzão,

Então, mesmo criando um “Java Project”, você poderia ter ido em no menu: “Project/Properties/Project Facets” e adicionado JPA ao seu projeto java “comum” que você teria todas as funcionalidade de JPA normalmente.

Quanto à anotação @Entity, o problema, provavelmente, deve ser o case do nome da sua tabela. Verifique se o nome da tabela não é “people”, por exemplo. Esse problema pode não ter resultado em Exception porque o banco deve ter desconsiderado o case adotado (não tenho certeza).

Dá uma conferida e posta ae…

[]s
Éberson

D

Perfeito, irei testar as 2 dicas e postar o resultado!

Porem, quanto ao case_sensitive não é, ja testei de todas as maneiras e o erro persiste!

Quanto a migração do Java Project para JPA Project, eu fiz utilizando as próprias ferramentas do eclipse, eu cliquei com o botão direito no projeto e la embaixo tem uma função, esqueci o nome, que faz exatamente isso, algo como:

Add JPA to project - Não é isso, só um exemplo!

Apartir disso o projeto ganhou o META-INF e começou a ter os problemas citados nesse tópico!

Mas enfim, irei testar as 2 soluções e postar o resultado obtido!

Desde ja,

Obrigado ao Eberson e ao Rodrigo!

R

É pra ser assim:

@Entity
@Table(name="People")
D

Galera, buenas notches!!!

Enfim, conferi as dicas, e o veredicto é:

A tabela chama-se “people” neste case.

E o problemo, de fato era: @Table que estava faltando!!!

De qualquer jeito obrigado galera, na video-aula não estavam usando, agora nao sei se o NetBeans compreende estas Annotations de outra forma!

D

Galera, boa noite!

Continuar com as rotinas de teste no JPA, mais erros!!!

Vou tentar por tudo neste único thread para não ficar floodando o forum!!!

Enfim, explicarei, a tentativa era fazer OneToOne utilizando o JPA, bem, tudo criado certinho!

2 classes: People e PeopleInfo aonde um People tem um PeopleInfo e vice-versa!

Ao tentar executar estes comandos:

People p = em.find(People.class, 4); PeopleInfo pinfo = new PeopleInfo(3, p, "Obser 3", "Jaspion", "boneco" ); // em.persist(pinfo); p.setInfo(pinfo); System.out.println( "A pessoa é " + p.getName() + " e sua info é " + p.getInfo().getNameOfPet() );

O erro:

Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.com.jpa.entity.People.info -> br.com.jpa.entity.PeopleInfo
	at org.hibernate.engine.CascadingAction$9.noCascade(CascadingAction.java:387)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:172)

Pelo o que a aula mostrava, era apenas colocar um cascade=CascadeType.ALL que iria de boa, blz, eu faço isso, ai na video-aula funfa, comigo não, e esta tudo idêntico, pelo menos era pra estar, olhei 5x o codigo!!!

Mas ai, muda o jogo, o seguinte erro ocorre:

Exception in thread "main" javax.persistence.EntityNotFoundException: Unable to find br.com.jpa.entity.PeopleInfo with id 0 at org.hibernate.ejb.Ejb3Configuration$Ejb3EntityNotFoundDelegate.handleEntityNotFound(Ejb3Configuration.java:133) at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:233)

Porem, eu nao estou tentando salvar na info = 0, e sim criar uma info = 3 certo?

No pc a video-aula foi certo, aqui nao vai, ja fiz muitas alteraçoões e nenhuma surtiu efeito!

Peço paciencia pois estou iniciando em JPA agora, e provavelmente seja algo tonto!

Anyway, obrigado desde ja!

D

Alguemmmm ???

vymerson

Duzas87:
Galera, buenas notches!!!

Enfim, conferi as dicas, e o veredicto é:

A tabela chama-se “people” neste case.

E o problemo, de fato era: @Table que estava faltando!!!

De qualquer jeito obrigado galera, na video-aula não estavam usando, agora nao sei se o NetBeans compreende estas Annotations de outra forma!

Uma coisa que pode estar acontecendo neste caso é a conexão do JPA estar desatualizada também. Neste caso no painel “Data Source Explorer” abra a conexão e atualize.
Muitos problemas referentes a comparação das entidades do JPA com as tabelas no banco serão resolvidas.

vymerson

Duzas87:
Galera, buenas notches!!!

Enfim, conferi as dicas, e o veredicto é:

A tabela chama-se “people” neste case.

E o problemo, de fato era: @Table que estava faltando!!!

De qualquer jeito obrigado galera, na video-aula não estavam usando, agora nao sei se o NetBeans compreende estas Annotations de outra forma!

Uma coisa que pode estar acontecendo neste caso é a conexão do JPA estar desatualizada também. Neste caso no painel “Data Source Explorer” abra a conexão e atualize.
Muitos problemas referentes a comparação das entidades do JPA com as tabelas no banco serão resolvidas.

D

Verifique se a seguinte propriedade, no"persistence.xml", está escrita de forma correta:

hibernate.hbm2[color=red]ddl[/color].auto

asousaj

Dan Paranhos:
Verifique se a seguinte propriedade, no"persistence.xml", está escrita de forma correta:

hibernate.hbm2[color=red]ddl[/color].auto

Dan, evite ressuscitar tópicos antigos.
Esse já tem 2 anos.

Criado 13 de janeiro de 2011
Ultima resposta 13 de nov. de 2013
Respostas 12
Participantes 7