Question

J'utilise Berkely DB et j'ai une erreur qui dit que les mutations manquent. Qu'est-ce que cela signifie?

Exception: com.sleepycat.persist.evolve.IncompatibleClassException: Mutation is missing to evolve class: TopMoveDAO.TopMoveClass version: 0 Error: java.lang.ClassNotFoundException: TopMoveDAO.TopMoveClasscom.sleepycat.persist.evolve.IncompatibleClassException: Mutation is missing to evolve class: TopMoveDAO.TopMoveClass version: 0 Error: java.lang.ClassNotFoundException: TopMoveDAO.TopMoveClass

à com.sleepycat.persist.impl.PersistCatalog. (PersistCatalog.java:365)  à com.sleepycat.persist.impl.Store. (Store.java:180)  à com.sleepycat.persist.EntityStore. (EntityStore.java:165)  à TopMoveDAO.TopMovePut.setup (TopMovePut.java:40)  à TopMoveDAO.TopMovePut.run (TopMovePut.java:59)  à TopMoveDAO.TopMovePut.main (TopMovePut.java:84)

package TopMoveDAO;

import java.io.File;
import java.util.Timer;
import java.util.TimerTask;

import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;

import com.sleepycat.persist.EntityStore;
import com.sleepycat.persist.StoreConfig; 

public class TopMovePut {

    //private static File envHome = new File("C:/dev/je-3.3.75/");
 private static File envHome = new File("C:/dev/db/berkeley");


    private Environment envmnt;
    private EntityStore store;
    private TopMoveDA sda; 


//Next we create a method that simply opens our database environment and entity store for us.

   // The setup() method opens the environment and store
    // for us.
    public void setup()
        throws DatabaseException {

        EnvironmentConfig envConfig = new EnvironmentConfig();
        StoreConfig storeConfig = new StoreConfig();

        envConfig.setAllowCreate(true);
        storeConfig.setAllowCreate(true);

        // Open the environment and entity store
        envmnt = new Environment(envHome, envConfig);
       store = new EntityStore(envmnt, "EntityStore", storeConfig);
    } 

//We also need a method to close our environment and store.

    // Close our environment and store.
    public void shutdown()
        throws DatabaseException {

        store.close();
        envmnt.close();
    } 



//Populate the entity store
private void run()
    throws DatabaseException {

    setup();

    // Open the data accessor. This is used to store
    // persistent objects.
    sda = new TopMoveDA(store);

    // Instantiate and store some entity classes

    PriceElement pe1 = new PriceElement();

    pe1.setSecCode("UNO");
    pe1.setLastPrice(1);

    sda.pIdx.put(pe1);

    shutdown();
} 

//main
public static void main(String args[]) {
    //SimpleStorePut ssp = new SimpleStorePut();
    TopMovePut tmp = new TopMovePut();
    try {
        //ssp.run();
     tmp.run();
    } catch (DatabaseException dbe) {
        System.err.println("TopMovePut: " + dbe.toString());
        dbe.printStackTrace();
    } catch (Exception e) {
        System.out.println("Exception: " + e.toString());
        e.printStackTrace();
    }
    System.out.println("All done - TopMovePut.");
}

} 
Était-ce utile?

La solution

Vous devez écrire une mutation pour faire évoluer votre base de données. La suppression de la base de données ne résoudra pas le problème, seulement pour la contourner (ce qui est très bien si vous ne l'avez pas encore déployé à la production, mais si vous ne voulez pas perdre vos données existantes puis écrire une mutation.)

Certaines modifications à vos entités persistantes sont gérées automatiquement par Berkley db, comme l'ajout d'un champ. Ceux qui impliquent la suppression de données ou de renommer les champs nécessitent généralement vous d'écrire une mutation explicite. Lorsque vous commencez à utiliser des mutations vous aurez également annoter vos entités avec les numéros de version que les mutations se référer - même si la mutation est gérée automatiquement, vous devrez augmenter le numéro de version. Lorsque vous effectuez des changements structurels majeurs tels que l'utilisation d'une clé primaire différente, vous devrez faire une conversion de magasin entier.

Faites attention en évolution une base de données dans un environnement répliqué. Je suggère fortement la lecture de ce qui suit:

http://www.oracle.com/technology/documentation/berkeley-db/je/java/com/sleepycat/persist/evolve/package-summary.html

Autres conseils

Vous devez supprimer votre base de données existante à chaque fois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top