使用JPL在Java中的BDB中存储子类



我正在尝试使用JPL将我的对象持久化为一个简单的BDB。问题是,如果我试图在主索引中存储一个子类,我会得到一个错误(如下)。

子类在数据方面没有任何不同,但它们在功能上不同,我希望子类是编组的实例类型。如果必须的话,那么密钥可以包含有问题的类,我可以自己实例化它

也许我需要每个子类一个索引?但这似乎并不正确,而且肯定会使查找过程复杂化。

示例:

@Test
public void testStoreEntity() throws Exception {
    Random r = new Random();
    File directory = new File("C:\Users\chribong\development\code\edifecs\engineering\platform\icd-code-factory\src\test\data\" + r.nextInt(1000));
    directory.mkdirs();
    EnvironmentConfig envConfig = new EnvironmentConfig();
    envConfig.setAllowCreate(true);
    envConfig.setTransactional(true);
    Environment env = new Environment(directory, envConfig);
    StoreConfig storeConfig = new StoreConfig();
    storeConfig.setAllowCreate(true);
    storeConfig.setTransactional(true);
    EntityStore store = new EntityStore(env, "PersonStore", storeConfig);
    PrimaryIndex<Key,AbstractBdbIcdCode> index = store.getPrimaryIndex(Key.class,AbstractBdbIcdCode.class);
    index.put(new AbstractBdbIcdCode(10,"foo", ICDCode.Type.DIAGNOSIS,".*"));
    index.put(new BdbIcd10DiagnosisCode("A000")); // error here
    // java.lang.IllegalArgumentException: Class could not be loaded or is not persistent
}

@Entity
public class AbstractBdbIcdCode implements ICDCode {
    @PrimaryKey
    private Key pk;
    protected String description;
    protected Set<String> concepts = new TreeSet<>();
    protected Set<String> antiConcepts = new TreeSet<>();
    protected Set<String> similarConcepts = new TreeSet<>();
}
@Persistent
public class Key {
    @KeyField(1)
    private ICDCode.Type type;
    @KeyField(2)
    private int version;
    @KeyField(3)
    private String code;
    public Key() {
    }
}
public class BdbIcd10DiagnosisCode extends AbstractBdbIcdCode implements ICD10DiagnosisCode{

    private transient String category;
    private transient  String etiology;
    private transient  String location;
    private String laterality;
    protected String extension;
}

好吧,我想好了:

子类必须是

@Persistent
public class BdbIcd10DiagnosisCode extends AbstractBdbIcdCode implements ICD10DiagnosisCode{
}

相关内容

  • 没有找到相关文章

最新更新