Ошибка мутации в Беркли DB - PullRequest
0 голосов
/ 23 мая 2009

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

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

} 

Ответы [ 2 ]

1 голос
/ 25 мая 2010

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

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

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

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

0 голосов
/ 06 июня 2009

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

...