1

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.(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.");
}

} 
4

2 に答える 2

2

データベースを進化させるには、ミューテーションを作成する必要があります。データベースを削除しても問題は解決せず、問題を回避するだけです (本番環境にまだデプロイしていない場合はこれで問題ありませんが、既存のデータを失いたくない場合はミューテーションを作成してください)。

フィールドの追加など、永続的なエンティティに対する一部の変更は、Berkley db によって自動的に処理されます。データの削除やフィールドの名前変更を伴うものでは、通常、明示的なミューテーションを記述する必要があります。ミューテーションの使用を開始するときは、ミューテーションが参照するバージョン番号でエンティティに注釈を付ける必要もあります。ミューテーションが自動的に処理される場合でも、バージョン番号をインクリメントする必要があります。別の主キーを使用するなどの大きな構造変更を行う場合は、ストア全体の変換を行う必要があります。

複製された環境でデータベースを展開するときは注意してください。以下を読むことを強くお勧めします。

パッケージ com.sleepycat.persist.evolve (Oracle - Berkeley DB Java Edition API)

于 2010-05-25T12:51:36.213 に答える
-1

毎回既存のデータベースを削除する必要があります。

于 2009-06-06T13:23:39.520 に答える