Вопрос

Я использую Berkely 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

в com.sleepycat.persist.impl.PersistCatalog.(PersistCatalog.java:365) в com.sleepycat.persist.impl.Store.(Store.java:180) в com.sleepycat.persist.Хранилище объектов.(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.");
}

} 
Это было полезно?

Решение

Вы должны написать мутацию, чтобы развить свою базу данных.Удаление базы данных не решит проблему, а только обойдет ее ( что нормально, если вы еще не развернули ее в рабочей среде, но если вы не хотите потерять существующие данные, тогда внесите изменения).

Некоторые изменения в ваших постоянных сущностях обрабатываются Berkley db автоматически, например добавление поля.Те, которые включают удаление данных или переименование полей, обычно требуют, чтобы вы написали явную мутацию.Когда вы начнете использовать мутации, вам также придется снабдить свои объекты номерами версий, на которые будут ссылаться мутации - даже если мутация обрабатывается автоматически, вам придется увеличить номер версии.Когда вы вносите серьезные структурные изменения, такие как использование другого первичного ключа, вам придется выполнить полное преобразование хранилища.

Будьте осторожны при разработке базы данных в реплицируемой среде.Я бы настоятельно рекомендовал прочитать следующее:

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

Другие советы

Вы должны каждый раз удалять свою существующую базу данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top