Pessoal Boa noite.
Estou fazendo um sistema para ler as tabela do banco de dados do sistema do datasus.
O mesmo está em D:\DATASUS\SISAIH01\SISAIH00.GD
Eu fiz uns testes com JDBC puro e consigo ler os dados das tabelas do mesmo.
Mas já bati a cabeça para tentar utilizar o Hibernate 4 para tentar acessar o mesmo.
Vou postar o arquivo de configuração e de classe que utilizo para fazer o mapeamento.
Esta é a classe Uf.java que tem que ser alimentada pela tabela TB_UF
package estudo.bean;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="TB_UF")
public class Uf implements Serializable {
private static final long serialVersionUID = -9013561194581930836L;
private String uf_sigla;
private String uf_cod_ibge;
private String uf_nome;
@Id
@Column(updatable = false, name = "UF_SIGLA", nullable = false, length=2)
public String getUf_sigla() {
return uf_sigla;
}
public void setUf_sigla(String uf_sigla) {
this.uf_sigla = uf_sigla;
}
@Column(updatable = false, name = "UF_COD_IBGE", nullable = true, length=2)
public String getUf_cod_ibge() {
return uf_cod_ibge;
}
public void setUf_cod_ibge(String uf_cod_ibge) {
this.uf_cod_ibge = uf_cod_ibge;
}
@Column(updatable = false, name = "UF_NOME", nullable = true, length=30)
public String getUf_nome() {
return uf_nome;
}
public void setUf_nome(String uf_nome) {
this.uf_nome = uf_nome;
}
}
E este é o arquivo persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<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_2_0.xsd"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="datasus" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>estudo.bean.Uf</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.firebirdsql.jdbc.FBDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:firebirdsql:localhost/3050:D:/DATASUS/SISAIH01/SISAIH00.GDB" />
<property name="javax.persistence.jdbc.user" value="sysdba" />
<property name="javax.persistence.jdbc.password" value="masterkey" />
<property name="hibernate.dialect" value="org.hibernate.dialect.InterbaseDialect" />
<!--
<property name="hibernate.dialect" value="org.hibernate.dialect.FirebirdDialect" />
<property name="hibernate.hbm2ddl.auto" value="update" />
-->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
Quando rodo uma classe de teste utilizando um DAO, segue o dao
package estudo.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import estudo.bean.Uf;
public class UfDAO {
protected EntityManager entityManager;
public UfDAO(){
entityManager = getEntityManager();
}
private EntityManager getEntityManager() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("datasus");
if (entityManager == null) {
entityManager = factory.createEntityManager();
}
return entityManager;
}
@SuppressWarnings("unchecked")
public List<Uf> findAll() {
return entityManager.createQuery("Select u from TB_UF u").getResultList();
}
public void fehcar(){
entityManager.close();
}
}
e segue o teste
package estudo.teste;
import estudo.bean.Uf;
import estudo.dao.UfDAO;
public class TesteAih {
public static void main(String[] args) {
UfDAO dao = new UfDAO();
for(Uf pe : dao.findAll()){
System.out.println(pe.getUf_sigla());
System.out.println(pe.getUf_nome());
System.out.println();
}
}
}
Tenho como resposta a seguinte mensagem no console.
Dez 24, 2013 7:41:59 PM org.hibernate.ejb.HibernatePersistence logDeprecation
WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
Dez 24, 2013 7:41:59 PM org.hibernate.ejb.HibernatePersistence logDeprecation
WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
Dez 24, 2013 7:41:59 PM org.hibernate.ejb.HibernatePersistence logDeprecation
WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
Dez 24, 2013 7:41:59 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [
name: datasus
...]
Dez 24, 2013 7:41:59 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.3.0.Final}
Dez 24, 2013 7:41:59 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Dez 24, 2013 7:41:59 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Dez 24, 2013 7:41:59 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.4.Final}
Dez 24, 2013 7:41:59 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!)
Dez 24, 2013 7:41:59 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000401: using driver [org.firebirdsql.jdbc.FBDriver] at URL [jdbc:firebirdsql:localhost/3050:D:/DATASUS/SISAIH01/SISAIH00.GDB]
Dez 24, 2013 7:41:59 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000046: Connection properties: {user=sysdba, password=****}
Dez 24, 2013 7:41:59 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000006: Autocommit mode: false
Dez 24, 2013 7:41:59 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
Dez 24, 2013 7:42:00 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.InterbaseDialect
Dez 24, 2013 7:42:00 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>
INFO: HHH000397: Using ASTQueryTranslatorFactory
Hibernate:
create table HT_TB_UF (UF_SIGLA varchar(2) not null, hib_sess_id CHAR(36))
Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: TB_UF is not mapped [Select u from TB_UF u]
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1750)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:331)
at estudo.dao.UfDAO.findAll(UfDAO.java:25)
at estudo.teste.TesteAih.main(TesteAih.java:9)
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: TB_UF is not mapped [Select u from TB_UF u]
at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:96)
at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:120)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:234)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190)
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1796)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:328)
... 2 more
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: TB_UF is not mapped
at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:189)
at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:109)
at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:95)
at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:331)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3554)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3443)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:706)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:562)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:247)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206)
... 10 more
Não sei mais o que fazer para utilizar o Hibernate para ler as tabelas.
Sei que se utilizar JDBC puro funciona.
Alguém teria alguma luz ou um norte para eu seguir?
Obrigado.
Jair Maia
skype - jairmaiask
Programador
Como podemos querer mudanças, se fazemos as mesmas coisas todos os dias?
0 comentários:
Postar um comentário