Bonjour à tous,
Merci pour vos réponses !
xcoulon wrote:
Est-ce que tu as un petit test Junit qui reproduit le problème ?
J'essaie de voir si je peux extraire ça ...
batmat wrote:
Je n'ai pas pratiqué ce genre de chose avec HSQLDB, mais en y réfléchissant, ça doit être une sorte de trigger qui gère ça (et je me demande si HSQLDB en gère, d'ailleurs).
Comme je le disais au début, ça marche en mapping XML avec
source="db" :
Code:
<timestamp name="storageTimestampOrNull" column="StorageTimestamp" source="db" />
batmat wrote:
Est-ce que tu as bien vérifié dans les logs que ce que tu as écrit dans @Column apparaît au moment de la création du schéma ? Et notamment qu'il n'y a pas d'erreur ?
J'ai activé
hibernate.show_sql=true et
org.hibernate.tool.hbm2ddl=debug, j'ai les traces suivantes mais je ne vois pas les requêtes de création (mais je vois la table créée dans la base), je ne sais pas pourquoi :
Code:
14 sept. 2010 16:06:12 org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
INFO: table not found: t_xxx
14 sept. 2010 16:06:12 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: schema update complete
Par contre, dans la table créée (PostgreSQL), le champ n'a rien de particulier (pour la génération automatique ) :
Code:
storage_timestamp timestamp without time zone NOT NULL,
mais avant chaque
insert, je vois cette requête qui permet à Hibernate de renseigner le champ pour l'insertion :
Code:
Hibernate: select now()
Hibernate: insert into ...
batmat wrote:
Comme la javadoc l'indique (
http://www.163jsp.com/help/javaee50api/ ... efinition()), c'est le fragment SQL utilisé pour généner le DDL.
Ca y est, ça marche avec les annotations, et j'ai compris pourquoi j'avais suivi la piste de
columnDefinition, sauf que ce que j'avais mis ne "passait" pas (erreur). Je viens de mettre ça :
Code:
@Column(columnDefinition = "timestamp default current_timestamp", insertable = false, updatable = false, nullable = false)
et ça marche. Le champ créé dans PostgreSQL a cette définition :
Code:
storage_timestamp timestamp without time zone NOT NULL DEFAULT now(),
En fait, cette solution consiste à préciser les caractéristiques du champ (c'est bien le but de
columnDefinition ) en demandant une valeur par défaut à
current_timestamp transformé en
now() dans PostgreSQL. D'ailleurs, c'est marrant, au niveau des requêtes, maintenant, j'ai ça :
Code:
Hibernate: insert into t_...
Hibernate: select hibernatep_.storage_timestamp as ...
Par contre, je ne sais pas si
@Temporal est nécessaire :
Code:
@Temporal(TemporalType.TIMESTAMP)
emmanuel wrote:
Je ne pense pas que Hibernate Annotations supporte ça nativement encore.
OK, je comprends mieux ! merci
Xavier