2017-08-23 4 views
1

I avait un type défini comme suit dans items.xml:Redéfinir type de données dans items.xml dans Hybris

<attribute qualifier="daysOfWeek" type="java.lang.String"> 
        <persistence type="property" /> 
</attribute> 

Pour modifier le type de données à énumération, je redéfini comme suit:

   <enumtype code="DaysOfWeek" autocreate="true" generate="true"> 
         <value code="Monday" /> 
         <value code="Tuesday" /> 
      </enumtype> 

     <attribute qualifier="daysOfWeek" type="DaysOfWeek"> 
       <persistence type="property" /> 
     </attribute> 

Après la mise à jour de l'extension, je reçois SQLException. Y a-t-il quelque chose qui ne va pas dans cette approche? Hybris ne prend pas en charge les mises à jour de ce type dans un système «en cours d'exécution»

Répondre

1

La raison est que hybris ne supprimera aucune colonne db et ne les recréera car toutes les données qu'il contient seront perdues (et il est probablement difficile d'écrire cette logique pour plusieurs bases de données supportées). Si vous êtes dans une phase de développement de votre projet, le moyen le plus simple de résoudre ce problème est d'initialiser votre système à partir de zéro (c'est-à-dire qu'il va supprimer la base de données et la recréer). Si vous avez un système/système de production en cours, vous devrez adopter une autre approche: Vous devez définir un nouvel attribut (nom différent!) Avec votre type d'énumération. Vous devrez alors probablement mettre à jour n'importe quel code pour utiliser le nouveau champ. Vous devez également prendre en charge la migration de données, c'est-à-dire écrire des scripts qui transfèrent les anciennes données (par exemple, la chaîne "Monday" vers la nouvelle valeur enum respective).

Espérons que cela aide!