質問
私はバークレー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.");
}
}
解決
あなたのデータベースを進化させる変異を記述する必要があります。データベースを削除しても問題が解決しないだろう、だけで(あなたはまだ生産を展開していない場合は罰金であるが、あなたがあなたの既存のデータを失いたくないならば、突然変異を記述します。)それを回避
あなたの永続エンティティにいくつかの変更は、そのようなフィールドを追加するなど、バークレーDBによって自動的に処理されます。フィールドのデータを削除するか、名前の変更を伴うものは、一般的に、明示的な変異を書くためにあなたを必要としています。あなたが変異を使用して起動すると、あなたはまた、変異が参照するバージョン番号を使用してエンティティに注釈を付ける必要があります - 突然変異が自動的に処理されている場合でも、あなたがバージョン番号をインクリメントする必要があります。あなたは、このような別の主キーを使用するなど、大きな構造変更を行うと、あなたは、店舗全体の変換を行う必要があります。
レプリケートされた環境でデータベースを進化するときには注意が必要です。私は強く、以下を読んでお勧めします:
<のhref = "http://www.oracle.com/technology/documentation/berkeley-db/je/java/com/sleepycat/persist/evolve/package-summary.html" のrel = "nofollowをnoreferrer" > http://www.oracle.com/technology/documentation/berkeley-db/je/java/com/sleepycat/persist/evolve/package-summary.html の
他のヒント
あなたは、既存のデータベースごとに削除する必要があります。