2009-08-19 4 views
3

J'ai une table MySql qui a un champ de date avec des zéros ("0000-00-00") comme valeur par défaut (le champ ne peut pas être nul, je ne peux pas changer la structure de la table). Hibernate n'aime pas les dates nulles et émet une exception pendant la lecture ou l'enregistrement.Comment travailler avec des dates nulles ("0000-00-00") dans Hibernate?

J'ai réussi à faire lire les enregistrements en définissant le paramètre de connexion MySql "zeroDateTimeBehavior = convertToNull" qui convertit les dates nulles en valeurs nulles lors de la récupération des enregistrements. Tout fonctionne bien jusqu'à ce que j'essaie de sauvegarder l'enregistrement qui a une date nulle - il émet une exception: cette date ne peut pas être nulle.

Donc la question est - comment enregistrer un enregistrement via Hibernate afin que la date apparaisse comme des zéros dans un tableau?

Merci.

+2

Pourquoi voulez-vous les gérer, de toute façon? Zero date - sortez et fêtez l'anniversaire de Jésus! Pourquoi êtes-vous devant votre ordinateur lors d'une occasion aussi importante?

+0

L'année zéro est inexistante dans le calendrier julien et grégorien - elle saute directement de 1 BC à 1 AD. Je ne peux pas vraiment blâmer Hibernate pour celui-ci. –

+0

Et un nombre zéro mois et le jour n'est pas autorisé de toute façon, même si l'année était valide. –

Répondre

1

Je voudrais essayer d'ajouter un Hibernate Interceptor (API, Doc) et essayer d'implémenter quelque chose dans la méthode onSave().

Le code suivant peut travailler:

static final Date ZERO_DATE = //0000-00-00 

public boolean onSave(Object entity, 
        Serializable id, 
        Object[] state, 
        String[] propertyNames, 
        Type[] types) 
      throws CallbackException { 
    for(int i = 0; i< propertyNames.length; i++) { 
     if(propertyNames[i].equals("dateFieldName") && state[i]==null) { 
      state[i] = ZERO_DATE; 
      return; //or may continue, if there are several such fields. 
     } 
    } 
} 
+0

Mais qu'est-ce que c'est exactement ZERO_DATE? – serg

+0

Représentation java d'un champ de date avec seulement des zéros. –

+0

Pouvez-vous donner un exemple à quoi cela ressemble? Il n'y a pas une telle chose dans Java comme date avec tous les zéros, c'est pourquoi il y a un problème avec les dates zéro. – serg

Questions connexes