[RESOLVIDO - UFAAA] Erro mapeamento: "Table_Name is not mapped" - Ajuda?!?!?!

Olá a todos… estou com uma aplicação rodando aqui, e tenho uma persistencia com o MS SQL Server 2005.
Algumas classes (as antigas, feitas por outra pessoa) funcionam corretamente, implementei algumas classes novas e estou tendo um erro na hora de executar meu código…

coloquei uma base de testes e to realizando alguns procedimentos basicos, como imprimir uma lista de itens cadastrados, porem aparece o erro abaixo, dizendo que a minha tabela nao foi mapeada… porem , ate onde vi esta mapeada assim como as outras…

Peço para que voces possam me ajudar, pois, com certeza, perceberao algo que eu ainda nao percebi.

agradeço desde já! Abraços.

eis o código persistence:

	<persistence-unit name="nova">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<properties>
			<property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver"/>
			<property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://X.X.X.X:1433/NOMEDABASE;sendStringParametersAsUnicode=false"/>
			<property name="hibernate.connection.username" value="yy"/>
			<property name="hibernate.connection.password" value="yyyyyyy"/>
			<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
			<property name="hibernate.jdbc.use_streams_for_binary" value="true"/>
			<property name="hibernate.query.substitutions" value="true 1, false 0, yes 'Y', no 'N'"/>
			<property name="hibernate.show_sql" value="true"/>
			<property name="hibernate.format_sql" value="true"/>
		</properties>
	</persistence-unit>

eis o bean:

public class HbmNovaLinhaBean implements IHbmNovaLinha {
	private EntityManager manager = Persistence.createEntityManagerFactory(
			"nova").createEntityManager();

	public void gravarLinha(HbmNovaLinha linha) {
		try {
			manager.getTransaction().begin();
			manager.persist(linha);
			manager.getTransaction().commit();
		} catch (RuntimeException e) {
			e.printStackTrace();
		}
	}

	public List<HbmNovaLinha> buscaTudo() {
		List<HbmNovaLinha> result = new ArrayList<HbmNovaLinha>();
		try {
			String jpql = "SELECT nl FROM NovaLinha nl ORDER BY nl.DescricaoLinha";
			Query query = manager.createQuery(jpql);
			List Linha = query.getResultList();
			for (Object o : Linha) {
				result.add((HbmNovaLinha) o);
			}
		} catch (RuntimeException e) {
			e.printStackTrace();
		}
		return result;
	}

       /* mais uns metodos abaixo que nao vem ao caso......        */
}
java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: NovaLinha is not mapped [SELECT nl FROM NovaLinha nl ORDER BY nl.DescricaoLinha]
	at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:617)
	at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:96)
	at br.invitro.produto.modelo.HbmNovaLinhaBean.buscaTudo(HbmNovaLinhaBean.java:74)
	at br.invitro.produto.principal.Principal.main(Principal.java:26)
Caused by: org.hibernate.hql.ast.QuerySyntaxException: NovaLinha is not mapped [SELECT nl FROM NovaLinha nl ORDER BY nl.DescricaoLinha]
	at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:158)
	at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:87)
	at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:70)
	at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:255)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3056)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
	at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
	at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
	at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
	at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
	at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
	at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
	at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
	at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:93)
	... 2 more

ESPERO QUE ALGUMA LUZ POSSA APARECER…

OBRIGADO!

você está fazendo o mapeamento como? Annotation ou xml?

cara sua classe NovaLinha não está mapeada, pelo jeito o sistema está usando XML porque senão deveria constar no seu persistence-xml suas classes que estão mapeadas com annotations… então adicione o mapeamento que vai funcionar.

Com JPA não é preciso indicar as classes que estão mapeadas, ele tem auto-discover.

senhores, eu possuo um arquivo persistence.xml que contem um trecho semelhante ao abaixo com o nome de cada tabela do banco, ou seja, este trecho se repete para cada tabela, somente mudando o nome…

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>

<persistence version="1.0"
	xmlns="http://java.sun.com/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
	
        <persistence-unit name="marca">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<properties>
			<property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver"/>
			<property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://X.X.X.X:1433/NOEMBASE;sendStringParametersAsUnicode=false"/>
			<property name="hibernate.connection.username" value="XX"/>
			<property name="hibernate.connection.password" value="XCXCX"/>
			<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
			<property name="hibernate.jdbc.use_streams_for_binary" value="true"/>
			<property name="hibernate.query.substitutions" value="true 1, false 0, yes 'Y', no 'N'"/>
			<property name="hibernate.show_sql" value="true"/>
			<property name="hibernate.format_sql" value="true"/>
		</properties>
	</persistence-unit>

	<persistence-unit name="nova">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<properties>
			<property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver"/>
			<property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://X.X.X.X:1433/NOEMBASE;sendStringParametersAsUnicode=false"/>
			<property name="hibernate.connection.username" value="XX"/>
			<property name="hibernate.connection.password" value="XCXCX"/>
			<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
			<property name="hibernate.jdbc.use_streams_for_binary" value="true"/>
			<property name="hibernate.query.substitutions" value="true 1, false 0, yes 'Y', no 'N'"/>
			<property name="hibernate.show_sql" value="true"/>
			<property name="hibernate.format_sql" value="true"/>
		</properties>
	</persistence-unit>

        <!-- aqui mais outros trecho de outras tabelas -->
	
</persistence>

o unico arquivo com configurações do hibernate que possuo é este…

[quote=rafaeldiego]senhores, eu possuo um arquivo persistence.xml que contem um trecho semelhante ao abaixo com o nome de cada tabela do banco, ou seja, este trecho se repete para cada tabela, somente mudando o nome…

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>

<persistence version="1.0"
	xmlns="http://java.sun.com/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
	
        <persistence-unit name="marca">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<properties>
			<property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver"/>
			<property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://192.168.1.25:1433/LinhaProduto;sendStringParametersAsUnicode=false"/>
			<property name="hibernate.connection.username" value="sa"/>
			<property name="hibernate.connection.password" value="Invitr1"/>
			<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
			<property name="hibernate.jdbc.use_streams_for_binary" value="true"/>
			<property name="hibernate.query.substitutions" value="true 1, false 0, yes 'Y', no 'N'"/>
			<property name="hibernate.show_sql" value="true"/>
			<property name="hibernate.format_sql" value="true"/>
		</properties>
	</persistence-unit>

	<persistence-unit name="nova">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<properties>
			<property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver"/>
			<property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://192.168.1.25:1433/LinhaProduto;sendStringParametersAsUnicode=false"/>
			<property name="hibernate.connection.username" value="sa"/>
			<property name="hibernate.connection.password" value="Invitr1"/>
			<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
			<property name="hibernate.jdbc.use_streams_for_binary" value="true"/>
			<property name="hibernate.query.substitutions" value="true 1, false 0, yes 'Y', no 'N'"/>
			<property name="hibernate.show_sql" value="true"/>
			<property name="hibernate.format_sql" value="true"/>
		</properties>
	</persistence-unit>

        <!-- aqui mais outros trecho de outras tabelas -->
	
</persistence>

o unico arquivo com configurações do hibernate que possuo é este…
[/quote]

a persistence unit se refere a sua base de dados… e não as suas tabelas…
você precisa mapear suas classes…

erro meu…

porém, cada classe que tenho aqui, está indicada na persistence-unit, ou seja… tenho as classes linha, novalinha, novasublinha, novalinha_sublinha, etc…

Nos arquivos java eu tenho a indicação logo no início, ou seja:

Na classe novalinha, indicada pela persistence unit:

	<persistence-unit name="NovaLinha">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<properties>
			<property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver"/>
			<property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://X.X.X.X:1433/NOMEBASE;sendStringParametersAsUnicode=false"/>
			<property name="hibernate.connection.username" value="yy"/>
			<property name="hibernate.connection.password" value="uyyyyy"/>
			<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
			<property name="hibernate.jdbc.use_streams_for_binary" value="true"/>
			<property name="hibernate.query.substitutions" value="true 1, false 0, yes 'Y', no 'N'"/>
			<property name="hibernate.show_sql" value="true"/>
			<property name="hibernate.format_sql" value="true"/>
		</properties>
	</persistence-unit>

eu tenho a indicação na classe bean, como mostrado abaixo:

public class HbmNovaLinhaBean implements IHbmNovaLinha {
	private EntityManager manager = Persistence.createEntityManagerFactory(
			"NovaLinha").createEntityManager();

.....

este mapeamento seria… ? alguma dica?
nao consegui abstair…
Valeu!

de novo: persistence-unit se refere ao seu banco de dados, não as suas classes!

entao vc teria uma persistence unit com os dados do seu banco de dados: usuario, senha, url de conexao, etc…
SOMENTE UMA.

depois disso, você precisa mapear suas classes: procure sobre hibernate annotations (no site do hibernate tem uma documentacao boa)

tem um livro bom sobre isso “Java Persistence with Hibernate”

[]´s

mais uma observação:

utilizo sim o anotations, segue um exemplo:

package br.invitro.produto.pojo;

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

@Entity
@Table(name = "NovaLinha")
public class HbmNovaLinha {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "IdLinha")
	private Integer id;

	@Column(name = "DescricaoLinha")
	private String descricao;

	public String getDescricao() {
		return descricao;
	}

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

	public Integer getId() {
		return id;
	}

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

outro feedback!

to fazendo uns testes, qdo eu chamo o método “recuperarLinha(Integer id)” passando um id que exista na minha base, ele retorna o resultado corretamente.

se eu chamo o método “buscaTudo()”, ele exibe a msg que a classe “NovaLinha” (que é o nome correto da tabela na base) não está mapeada!

public class HbmNovaLinhaBean implements IHbmNovaLinha {
	private EntityManager manager = Persistence.createEntityManagerFactory("novalinha").createEntityManager();

	public HbmNovaLinha recuperarLinha(Integer id) {
		try {
			return manager.find(HbmNovaLinha.class, id.intValue());
		} catch (RuntimeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	public List<HbmNovaLinha> buscaTudo() {
		List<HbmNovaLinha> result = new ArrayList<HbmNovaLinha>();
		try {
			String jpql = "SELECT nl FROM NovaLinha nl ORDER BY nl.DescricaoLinha";
			Query query = manager.createQuery(jpql);
			System.out.println(query);
			List Linha = query.getResultList();
			for (Object o : Linha) {
				result.add((HbmNovaLinha) o);
			}
		} catch (RuntimeException e) {
			e.printStackTrace();
		}
		return result;
	}
}

Por favor, alguém poderia ajudar?

Abraço

chamar os beatles: “help… I need somebody!”

alguem?

Tenta usar a query: “from NovaLinha” e vê se dá erro

....
=(


=(

Tenta agora:

Session session = manager.getDelegate();
Criteria criteria = session.createCriteria(HbmNovaLinha.class);
List result = criteria.list();

Cara, deu certinho aqui!!!
Você flagra de mais!!!

Eu nao iria pensar em usar Session e Criteria tao cedo!!!

Valeu mesmo cara!!!

acrescentei só o case : Session session = (Session) manager.getDelegate();

VALEU CARA!!!
Agora vou adaptar a saída web dele, mas deve ser mais tranquilo!

Um abraçao! e muito obrigado!!!

e no caso de eu ter os entities desenvolvidos em um projeto J2Se e a partir dai gero um jar dessas classes e importo no meu projeto maven2, na hora de acessar pego esse mesmo erro de mapped. Pq será? ajuda ae

Tente fazer um “from HbmNovaLinha” e vê se funciona.

Cara, me ajudou muito tb!
No meu caso tentava listar os tipos de permisoes cadastradas:

	public List<Permissoe> getPermissoes(){
		
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("IntraWebSelecoes");
		EntityManager em = emf.createEntityManager();
	
		em.getTransaction().begin();
		
		Session session = (Session) em.getDelegate();  
		Criteria criteria = session.createCriteria(Permissoe.class);  
		List<Permissoe> permissoe = criteria.list(); 
		
		em.getTransaction().commit();
		em.close();
		emf.close();

	    return permissoe;
	}