-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 6 posts ] 
Author Message
 Post subject: Annotations + Hibernate + PostGreSQL -7.4
PostPosted: Thu Jul 28, 2005 1:06 pm 
Newbie

Joined: Thu Jul 28, 2005 12:44 pm
Posts: 3
Bonjour. J'ai un problème avec Hibernate lors de la génération du schéma de ma BDD avec les annotation et Hibernate.

J'ai plusieurs classes et chacune a un identifiant que j'annote de la sorte :

Code:
public abstract class AbstractNode implements INode
{
    protected Integer id;
    ...
   
    @Id(generate = GeneratorType.AUTO)
    public Integer getId()
    {
        return id;
    }

    ...
}


Hibernate me crée bien la table dans PostGreSQL. Le problème survient au moment ou dans mon code je sauvegarde mon objet. Hibernate me génère la requête

Code:
insert into ABSTRACTNODE (name, parentNode_id, TYPE, id) values (?, ?, 'DossierImpl', null)


Comme vous pouvez le deviner la requête est rejetée parcceque Hibernate ne génère pas de numéro d'id pour l'insertion. Et dans les log de PostGreSQL, il y a :

Code:
LOG:  statement: set datestyle to 'ISO'; select version(), case when pg_encoding_to_char(1) = 'SQL_ASCII' then 'UNKNOWN' else getdatabaseencoding() end;
LOG:  statement: set client_encoding = 'UNICODE'
LOG:  statement: set datestyle to 'ISO'; select version(), case when pg_encoding_to_char(1) = 'SQL_ASCII' then 'UNKNOWN' else getdatabaseencoding() end;
LOG:  statement: set client_encoding = 'UNICODE'
LOG:  statement: select sequence_name from system_sequences
ERROR:  relation "system_sequences" does not exist
LOG:  statement: set datestyle to 'ISO'; select version(), case when pg_encoding_to_char(1) = 'SQL_ASCII' then 'UNKNOWN' else getdatabaseencoding() end;
LOG:  statement: set client_encoding = 'UNICODE'
LOG:  statement: select count(*) from ABSTRACTNODE
LOG:  statement: set datestyle to 'ISO'; select version(), case when pg_encoding_to_char(1) = 'SQL_ASCII' then 'UNKNOWN' else getdatabaseencoding() end;
LOG:  statement: set client_encoding = 'UNICODE'
LOG:  statement: select count(*) from PROFIL
LOG:  statement: set datestyle to 'ISO'; select version(), case when pg_encoding_to_char(1) = 'SQL_ASCII' then 'UNKNOWN' else getdatabaseencoding() end;
LOG:  statement: set client_encoding = 'UNICODE'
LOG:  statement: select count(*) from PONDERATION
LOG:  statement: set datestyle to 'ISO'; select version(), case when pg_encoding_to_char(1) = 'SQL_ASCII' then 'UNKNOWN' else getdatabaseencoding() end;
LOG:  statement: set client_encoding = 'UNICODE'
LOG:  statement: select count(*) from USERSNOTES
LOG:  statement: set datestyle to 'ISO'; select version(), case when pg_encoding_to_char(1) = 'SQL_ASCII' then 'UNKNOWN' else getdatabaseencoding() end;
LOG:  statement: set client_encoding = 'UNICODE'
LOG:  statement: select count(*) from  dual_hibernate_sequence
LOG:  statement: set datestyle to 'ISO'; select version(), case when pg_encoding_to_char(1) = 'SQL_ASCII' then 'UNKNOWN' else getdatabaseencoding() end;
LOG:  statement: set client_encoding = 'UNICODE'
LOG:  statement: begin;
LOG:  statement: insert into ABSTRACTNODE (name, parentNode_id, TYPE, id) values ('.Net', null, 'fr.ebi.capico.carto.model.hibernate.DossierImpl', null)
ERROR:  null value in column "id" violates not-null constraint
LOG:  statement: rollback; begin;
LOG:  statement: end


Je voudrais savoir si quelqu'un a déja eu ce bug et si oui comment le résoudre. Merci d'avance


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 29, 2005 1:48 am 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
REgarde pourquoi ERROR: relation "system_sequences" does not exist
apparait. Comme la sequence n'existe pas, Hibernate ne peut pas créer d'id.

PS je passe mes tests sur PostGresSQL 8

_________________
Emmanuel


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 29, 2005 5:27 am 
Newbie

Joined: Thu Jul 28, 2005 12:44 pm
Posts: 3
Le ERROR: relation "system_sequences" does not exist apparait parcequ'il n'y a aucune séquence qui est créée. Normalement avec
Code:
@Id(generate = GeneratorType.AUTO)

on crée un identifiant qui, à chaque insertion s'auto-incrémente. Malheuresement PostGreSQL 7.4 ne gère pas les identifiants mais plutôt les séquences. Du coup quand avec Hibernate je fait un insert, il essaye de récupérer le dernier numéro d'une séquence alors qu'elle n'éxiste pas du tout d'ou l'erreur.

J'ai essayé avec
Code:
@Id(generate = GeneratorType.SEQUENCE)
mais la aussi il y a un problème lors de l'insertion d'une ligne, il n'arrive pas à récupérer la valeur de la séquence. Il crée la requête:

Code:
select next value for hibernate_sequence from dual_hibernate_sequence


que hibernate n'arrive pas à executer. J'ai vu sur le site de postgreSQL que pour résoudre ce problème, il faut définir le type de mon champ en BIGSERIAL. Le problème maintenant c'est que je ne sais pas comment on spécifie à Hibernate le type d'une colonne.

Merci d'avance pour toutes les pistes que vous pouvez avoir.
N.B: Je nai pas la possibilité de passer de PostgreSQL 7.4 à la version 8.0 à cause de certaines contraintes. Bonne journée


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 29, 2005 12:32 pm 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
etrange, Hibernate devrait créer ces sequences. Tu peux toujours utiliser GeneratorType.INDENTITY, je crois que PostGres les supporte aussi

_________________
Emmanuel


Top
 Profile  
 
 Post subject:
PostPosted: Tue Aug 02, 2005 11:58 am 
Newbie

Joined: Thu Jul 28, 2005 12:44 pm
Posts: 3
Oui Hibernate crée bien les séquences dans la base PostGreSQL mais il n'arrive pas à récupérer la valeur suivant pour faire l'insertion. Je suis passé en PostGreSQL 8.0.3 et ça ne marche pas mieux. Quand j'utilise @Id(generate = GeneratorType.SEQUENCE) ça donne
Code:
Hibernate: select next value for hibernate_sequence from dual_hibernate_sequence

Erreur PostGreSQL 8.0.3:
Code:
ERROR:  relation "system_sequences" does not exist
ERROR:  syntax error at or near "value" at character 13


Quand j'utilise @Id(generate = GeneratorType.IDENTITY) ça donne
Code:
Hibernate: insert into ABSTRACTNODE (..., id) values (..., null)

Erreur PostGreSQL 8.0.3:
Code:
ERROR:  relation "system_sequences" does not exist
ERROR:  null value in column "id" violates not-null constraint


Quand j'utilise @Id(generate = GeneratorType.AUTO) ça donne
Code:
Hibernate: insert into ABSTRACTNODE (..., id) values (..., null)

Erreur PostGreSQL 8.0.3:
Code:
ERROR:  relation "system_sequences" does not exist
ERROR:  null value in column "id" violates not-null constraint


J'ai réussi à modifier le type de mon id en utilisant les annotations suivantes:

Code:
    ...
    @Id (generate = GeneratorType.AUTO)
    @Column(columnDefinition="BIGSERIAL")
    public Integer getId(){
    ...}


Avec cela le type de id est bien BIGSERIAL mais pour que cela fonctionne il faudrait que hibernate me génère une requête sans tenir compte du champ id. C'est à dire si dans ma table Personne j'ai les champs id, nom prenom, il faudrait que la requête générée soit:insert into Personne (nom, prenom) values ('toto', 'tata') plutot que insert into Personne (id, nom, prenom) values (null, 'toto', 'tata') parceque avec le null ça ne passe pas.

Comment est ce que je peux faire pour enlever le champ id de la requête générée? Merci et bonne soirée


Top
 Profile  
 
 Post subject:
PostPosted: Thu Aug 04, 2005 7:38 pm 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
hum, essaie de faire tourner la suite de test hibernate annotations sur Postgres, elle doit fonctionner (ell fonctionne chez moi)

_________________
Emmanuel


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 6 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.