题
我是伯克利用数据库和我有一个错误,它说,突变的缺失。这是什么意思?
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.持续存在。实施.PersistCatalog.(PersistCatalog.java:365) 在com.sleepycat.持续存在。实施.商店。(储存。java:180) 在com.sleepycat.持续存在。EntityStore.(EntityStore.java:165) 在TopMoveDAO.TopMovePut.设置(TopMovePut.java:40) 在TopMoveDAO.TopMovePut.运行(TopMovePut.java:59) 在TopMoveDAO.TopMovePut.主(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.");
}
}
解决方案
你必须要写一个突变为发展数据库。删除该数据库将不解决问题,只是规避它的(这是很好的如果尚未部署到生产,但是如果你不想失去你的现有数据然后写一的突变。)
一些改变你的持久性实体都自动地处理由伯克利数据库,例如添加一个领域。那些涉及删除的数据或者重新命名字段的一般要求你写一个明确的突变。当你开始使用突变,你也必须注释你的实体版本数字的突变将参照即使是突变自动处理的,你将需要增加版本的编号。当你做出了重大的结构变化,例如使用一个不同的主要关键,你将要做的整个存储转换。
照顾当发展一个数据库复制的环境。我强烈建议阅读如下:
其他提示
您每次都要删除现有的数据库。
不隶属于 StackOverflow