IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

[Hibernate + JPA + HSQLdb] Colonne Date


Sujet :

Hibernate Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 9
    Points : 10
    Points
    10
    Par défaut [Hibernate + JPA + HSQLdb] Colonne Date
    Bonjour,

    J'ai une architecture simple : JPA qui déclare des entités, implémentée par Hibernate et connectée à HSQLdb. Rien de plus classique.

    Tout marche parfaitement sauf dès que je souhaite créer une colonne/propriété Date (java.util.Date) :

    ServiceDAO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    package creagarde.dao;
     
    import creagarde.data.Service;
     
    public class ServiceDAO extends BasicDAO {
     
    	@SuppressWarnings("unchecked")
    	public Service[] getServices() {
    		return (Service[]) session.createQuery("FROM Service s ORDER BY s.nom").list().toArray(new Service[] {});
    	}
     
    	public Service getService(long id) {
    		return (Service) session.createQuery("FROM Service s WHERE s.id = :id").setParameter("id", id).uniqueResult();
    	}
    }
    Service :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    package creagarde.data;
     
    import java.io.Serializable;
     
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.ManyToMany;
    import javax.persistence.ManyToOne;
    import javax.persistence.OneToMany;
    import javax.persistence.OrderColumn;
     
    import com.creatixea.gwt.data.BasicData;
     
    @Entity
    public class Service extends BasicData implements Serializable {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 3340660154632376275L;
     
    	private String nom;
     
    	@ManyToMany(mappedBy="services", fetch=FetchType.EAGER)
    	@OrderColumn(name="id")
    	private Utilisateur[] utilisateurs;
     
    	@ManyToOne
    	private Utilisateur responsable;
     
    	@OneToMany(mappedBy="service", fetch=FetchType.EAGER)
    	@OrderColumn(name="dateInscription")
    	private PreInscription[] preInscriptions;
     
    	private int semaineDebut;
    	private int semaineFin;
     
    	private int samediDebut;
    	private int samediFin;
     
    	private int dimancheDebut;
    	private int dimancheFin;
     
    	public String getNom() {
    		return nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public Utilisateur[] getUtilisateurs() {
    		return utilisateurs;
    	}
     
    	public int getSemaineDebut() {
    		return semaineDebut;
    	}
     
    	public void setSemaineDebut(int semaineDebut) {
    		this.semaineDebut = semaineDebut;
    	}
     
    	public int getSemaineFin() {
    		return semaineFin;
    	}
     
    	public void setSemaineFin(int semaineFin) {
    		this.semaineFin = semaineFin;
    	}
     
    	public int getSamediDebut() {
    		return samediDebut;
    	}
     
    	public void setSamediDebut(int samediDebut) {
    		this.samediDebut = samediDebut;
    	}
     
    	public int getSamediFin() {
    		return samediFin;
    	}
     
    	public void setSamediFin(int samediFin) {
    		this.samediFin = samediFin;
    	}
     
    	public int getDimancheDebut() {
    		return dimancheDebut;
    	}
     
    	public void setDimancheDebut(int dimancheDebut) {
    		this.dimancheDebut = dimancheDebut;
    	}
     
    	public int getDimancheFin() {
    		return dimancheFin;
    	}
     
    	public void setDimancheFin(int dimancheFin) {
    		this.dimancheFin = dimancheFin;
    	}
     
    	public Utilisateur getResponsable() {
    		return responsable;
    	}
     
    	public void setResponsable(Utilisateur responsable) {
    		this.responsable = responsable;
    	}
     
    	public PreInscription[] getPreInscriptions() {
    		return preInscriptions;
    	}
    }
    PreInscription :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    package creagarde.data;
     
    import java.util.Date;
     
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.Temporal;
    import javax.persistence.TemporalType;
     
    import com.creatixea.gwt.data.BasicData;
     
    @Entity
    public class PreInscription extends BasicData {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = -7342079877367354617L;
     
    	@ManyToOne
    	@JoinColumn
    	private Utilisateur utilisateur;
     
    	@ManyToOne
    	@JoinColumn
    	private Service service;
     
    	@Temporal(TemporalType.DATE)
    	private Date dateInscription = new Date();
     
    	@Temporal(TemporalType.DATE)
    	private Date dateActualisation = new Date();
     
    	public Utilisateur getUtilisateur() {
    		return utilisateur;
    	}
     
    	public void setUtilisateur(Utilisateur utilisateur) {
    		this.utilisateur = utilisateur;
    	}
     
    	public Service getService() {
    		return service;
    	}
     
    	public void setService(Service service) {
    		this.service = service;
    	}
     
    	public Date getDateInscription() {
    		return dateInscription;
    	}
     
    	public void setDateInscription(Date dateInscription) {
    		this.dateInscription = dateInscription;
    	}
     
    	public Date getDateActualisation() {
    		return dateActualisation;
    	}
     
    	public void setDateActualisation(Date dateActualisation) {
    		this.dateActualisation = dateActualisation;
    	}
     
     
    }
    Et enfin le log d'erreur :

    Caused by: org.hibernate.exception.SQLGrammarException: could not initialize a collection: [creagarde.data.Service.preInscriptions#1]
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    at org.hibernate.loader.Loader.loadCollection(Loader.java:2069)
    at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:62)
    at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:628)
    at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:83)
    at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1853)
    at org.hibernate.type.CollectionType.getCollection(CollectionType.java:646)
    at org.hibernate.type.CollectionType.resolveKey(CollectionType.java:430)
    at org.hibernate.type.CollectionType.resolve(CollectionType.java:424)
    at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:140)
    at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:898)
    at org.hibernate.loader.Loader.doQuery(Loader.java:773)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)
    at org.hibernate.loader.Loader.doList(Loader.java:2294)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2172)
    at org.hibernate.loader.Loader.list(Loader.java:2167)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:448)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1258)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
    at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:859)
    at creagarde.dao.ServiceDAO.getService(ServiceDAO.java:13)
    at creagarde.serveur.CreagardeServiceImpl.getService(CreagardeServiceImpl.java:123)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.sf.gilead.gwt.PersistentRemoteService.processCall(PersistentRemoteService.java:174)
    ... 22 more
    Caused by: java.sql.SQLSyntaxErrorException: incompatible data type in conversion: from SQL type DATE to java.lang.Integer, value: instance of org.hsqldb.types.TimestampData
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.Util.throwError(Unknown Source)
    at org.hsqldb.jdbc.JDBCResultSet.getColumnInType(Unknown Source)
    at org.hsqldb.jdbc.JDBCResultSet.getInt(Unknown Source)
    at org.hsqldb.jdbc.JDBCResultSet.getInt(Unknown Source)
    at org.hibernate.type.IntegerType.get(IntegerType.java:51)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:186)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:175)
    at org.hibernate.persister.collection.AbstractCollectionPersister.readIndex(AbstractCollectionPersister.java:769)
    at org.hibernate.collection.PersistentArrayHolder.readFrom(PersistentArrayHolder.java:137)
    at org.hibernate.loader.Loader.readCollectionElement(Loader.java:1052)
    at org.hibernate.loader.Loader.readCollectionElements(Loader.java:690)
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:630)
    at org.hibernate.loader.Loader.doQuery(Loader.java:745)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)
    at org.hibernate.loader.Loader.loadCollection(Loader.java:2062)
    ... 49 more
    Caused by: org.hsqldb.HsqlException: incompatible data type in conversion: from SQL type DATE to java.lang.Integer, value: instance of org.hsqldb.types.TimestampData
    at org.hsqldb.error.Error.error(Unknown Source)
    ... 63 more
    Est-ce que quelqu'un aurait une idée de comment il faut s'y prendre ? Une recherche Google sur cette erreur ne renvoit vers aucun forum, comme si j'étais le premier à tomber dessus. Or je pense que c'est quelque chose de commun d'utiliser un champ Date directement ...

    Merci par avance de vos idées / solutions

    Émilien

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caused by: java.sql.SQLSyntaxErrorException: incompatible data type in conversion: from SQL type DATE to java.lang.Integer, value:
    T'essaies de mapper un entier JAVA sur une date de ta base.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Mais justement, c'est ce que je ne comprend pas : je ne vois pas en quoi mon code demande une telle chose ...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    En fin de compte, le souci était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @OrderColumn(name="dateInscription")
    Car il essaye d'ordonner suivant Integer ... En passant la colonne à id, le problème est résolu ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Hibernate / JPA / HSQLDB] Problème d'import.sql
    Par Gaspard22 dans le forum Hibernate
    Réponses: 0
    Dernier message: 01/08/2013, 12h15
  2. Réponses: 2
    Dernier message: 30/04/2013, 14h07
  3. Réponses: 0
    Dernier message: 03/12/2008, 10h49
  4. Index sur une colonne Date
    Par sjaeger dans le forum Oracle
    Réponses: 11
    Dernier message: 10/11/2005, 14h55
  5. [SQL*Loader] Fusionner 2 colonnes dates
    Par choubiroute dans le forum Oracle
    Réponses: 4
    Dernier message: 21/04/2005, 14h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo