2009-05-23 7 views
0

Ich benutze Berkely DB und ich habe einen Fehler, der besagt, dass Mutationen fehlen. Was bedeutet das?Mutationsfehler in Berkeley DB

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 

bei com.sleepycat.persist.impl.PersistCatalog. (PersistCatalog.java:365) bei com.sleepycat.persist.impl.Store. (Store.java:180) bei com.sleepycat. persist.EntityStore. (EntityStore.java:165) bei TopMoveDAO.TopMovePut.setup (TopMovePut.java:40) bei TopMoveDAO.TopMovePut.run (TopMovePut.java:59) bei 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."); 
} 

} 

Antwort

1

Sie müssen eine Mutation schreiben, um Ihre Datenbank zu entwickeln. Durch das Löschen der Datenbank wird das Problem nicht gelöst, sondern nur umgangen (was in Ordnung ist, wenn Sie noch nicht zur Produktion bereitgestellt haben, aber wenn Sie Ihre vorhandenen Daten nicht verlieren möchten, dann schreiben Sie eine Mutation.)

Einige Änderungen an Ihrem Persistente Entitäten werden automatisch von Berkley db verarbeitet, z. B. indem ein Feld hinzugefügt wird. Wenn Sie Daten löschen oder Felder umbenennen, müssen Sie in der Regel eine explizite Mutation schreiben. Wenn Sie anfangen, Mutationen zu verwenden, müssen Sie auch Ihre Entitäten mit Versionsnummern versehen, auf die sich die Mutationen beziehen - selbst wenn die Mutation automatisch behandelt wird, müssen Sie die Versionsnummer erhöhen. Wenn Sie größere strukturelle Änderungen vornehmen, z. B. einen anderen Primärschlüssel verwenden, müssen Sie eine vollständige Speicherkonvertierung durchführen.

Vorsicht beim Entwickeln einer Datenbank in einer replizierten Umgebung.

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

+0

-Link:: Ich würde stark folgenden empfehlen Lese http://www.oracle.com/technology/documentation/berkeley-db/je/java/com/sleepycat/persist/evolve/package- Zusammenfassung.html ist nicht verfügbar. Neu ist http://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/persist/evolve/package-summary.html – Veniamin

-1

Sie müssen Ihre vorhandene Datenbank jedes Mal löschen.