Hibernate com postgresql

8 respostas
Fabricio_Cozer_Marti

olá pessoal,

estou dando uma olhada no hibernate, e estou tendo alguns problemas, que podem ser simples pra galera do guj.

sou iniciante mesmo, entao resolvi criar apenas uma única tabela no postgresql e tentar persistir os dados, porém após algum tempo tentando e chingando tb o hibernate, percebi que existe um certo problema em relacao aos nomes das tabelas e colunas que foram criadas.

Crei com letra maiuscula no banco e na execucao da query feita pelo hibernate dizia que não estava conseguindo encontrar a tabela, após alterar o nome da tabela para minusculo assim como os nomes das colunas para minusculo tb, aí funfou beleza… queria saber se teria algum xml, ou parametro que possa alterar para contornar esse problema de case-sensitive.

Se não ficou claro eu explico melhor.

8 Respostas

Rodrigo_Carvalho_Aul

O case sentitive não é do hibernate, é do postgres… e não conheço nenhum jeito de mudar isso…

Mas isso não é problema, nos xmls do hibernate você pode configurar tanto o nome da propriedade quando o nome da coluna.

[]'s

Rodrigo C. A.

Fabricio_Cozer_Marti

Sim Rodrigo, eu já tinha colocado os nomes das colunas maiusculas no .hbm.xml, e mesmo assim nao funcionou.

J2Alex

Fabrício Cozer Martins:
Sim Rodrigo, eu já tinha colocado os nomes das colunas maiusculas no .hbm.xml, e mesmo assim nao funcionou.

Olá Fabrício,

Mesmo que vc mande criar as tabelas e campos com maíusculos, o Postgre o fará com minúsculos e como o Postgre é case-sensitive vc sempre deverá configurar tudo em minúsculo.

Isso não tem nada a ver com o hibernate é coisa do Postgre mesmo.

Valeu

Fabricio_Cozer_Marti

beleza, cara valeu! entendi
mas vc sabe se existe alguma coisa pra eu configurar no postgre para ele nao colocar como minusculo ?

J2Alex

Não sei se dá não. :roll:

D

Posso estar enganado, mas até onde lembro o postgresql não é case-sensitive para nome de tabelas ou colunas, a não ser que sejam criados usando aspas (ex. “Tabela”).

Fabricio_Cozer_Marti

Dharis, é case sensitive sim,
se vc colocar o nome da tabela ou das colunas entre aspas ele desconsidera o case sensitive. Pelo menos funcionou comigo ontem.

tchernomirdin

Oi, tudo bom, eu estou tentando mapear duas tabelas no hibernate mas não estou conseguindo, você poderia me dar uma mão?
Se você puser ficarei muito agradecido faz tempo que tento resolver e não consigo, obrigado. Esses são os códigos que eu fiz no xml e no sql, eu estou usando o postgres 8.3.

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">


<hibernate-mapping>
    <class name="beans.departamento"
           table="departamento">
        <id name="id_departamento" column="id_departamento" type="int">
             <generator class="increment"/>
        </id>
        <property name="nome" type="java.lang.String"/>
        <property name="sigla" type="java.lang.String"
                  />
        <!-- Mapeamento dos cursos -->
       <set name="curso" table="departamento_curso"
             inverse="true">
             <key column="id_departamento"/>
             <many-to-many column="id_curso"
                    class="beans.curso"/>
       </set>
    </class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="beans.curso"    table="curso">
        <id name="id_curso" column="id_curso" type="int">
             <generator class="increment"/>
        </id>
        <property name="codigo"/>
        <property name="nome"/>
        <property name="sigla"/>
        

      <!-- Mapeamento dos departamentos-->
      <set name="departamento" table="departamento_curso">
             <key column="id_curso"/>
             <many-to-many column="id_departamento"
                        class="beans.departamento"/>
      </set>
    </class>
</hibernate-mapping>
CREATE TABLE curso (
id_curso int,
codigo int,
nome varchar,
sigla var,
id int REFERENCES aluno,
PRIMARY KEY (id_curso)
);
CREATE TABLE departamento_curso (
id_departamento int REFERENCES departamento,
id_curso int REFERENCES curso
);
CREATE TABLE departamento (
id_departamento int,
nome varchar,
sigla varchar,
id_curso int REFERENCES curso,
PRIMARY KEY (id_departamento)
);

Os erros que aparecem no hibernate são esses:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).

log4j:WARN Please initialize the log4j system properly.

Exception in thread main org.hibernate.exception.SQLGrammarException: could not fetch initial value

at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:59)

at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)

at org.hibernate.id.IncrementGenerator.getNext(IncrementGenerator.java:107)

at org.hibernate.id.IncrementGenerator.generate(IncrementGenerator.java:45)

at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:85)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184)

at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173)

at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)

at org.hibernate.impl.SessionImpl.save(SessionImpl.java:481)

at org.hibernate.impl.SessionImpl.save(SessionImpl.java:476)

at teste.TesteCurso.main(TesteCurso.java:71)

Caused by: org.postgresql.util.PSQLException: ERROR: relation departamento does not exist

at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)

at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)

at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)

at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)

at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)

at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)

at org.hibernate.id.IncrementGenerator.getNext(IncrementGenerator.java:89)

 10 more

se puder me ajudar eu agradeço muito []s.

Criado 25 de julho de 2005
Ultima resposta 8 de mai. de 2008
Respostas 8
Participantes 5