Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle Berkeley DB Java Edition-辅助密钥唯一性_Java_Database_Berkeley Db Je - Fatal编程技术网

Oracle Berkeley DB Java Edition-辅助密钥唯一性

Oracle Berkeley DB Java Edition-辅助密钥唯一性,java,database,berkeley-db-je,Java,Database,Berkeley Db Je,我有一个简单的实体类,它应该包括唯一的名称 @Entity class Package { @PrimaryKey(sequence = "ID") public Long id; @SecondaryKey(relate = Relationship.ONE_TO_ONE) public String name; private Package() {} public Package(String name) { this.name = n

我有一个简单的实体类,它应该包括唯一的名称

@Entity
class Package {
    @PrimaryKey(sequence = "ID")
    public Long id;

    @SecondaryKey(relate = Relationship.ONE_TO_ONE)
    public String name;

    private Package() {}

    public Package(String name) { this.name = name; }

    @Override
    public String toString() { return id + " : " + name; }
}
由于大量修改,我想使用延迟写入选项。这是我尝试的测试及其输出

final String dbfilename = "test01";
new File(dbfilename).mkdirs();
EnvironmentConfig config = new EnvironmentConfig().setAllowCreate(true);
Environment environment = new Environment(new File(dbfilename), config);
StoreConfig storeConfig = new StoreConfig().setAllowCreate(true).setDeferredWrite(true);
EntityStore store = new EntityStore(environment, "", storeConfig);

PrimaryIndex<Long, Package> primaryIndex = store.getPrimaryIndex(Long.class, Package.class);

try {
    primaryIndex.put(new Package("package01")); // will be put.
    primaryIndex.put(new Package("package01")); // throws exception.
} catch (UniqueConstraintException ex) {
    System.out.println(ex.getMessage());
}

store.sync(); // flush them all

// expecting to find one element
SortedMap<Long,Package> sortedMap = primaryIndex.sortedMap();
for (Package entity : sortedMap.values()) {
    System.out.println(entity);
} 
所以我的问题是,即使它在放入第二个包时抛出异常,为什么它会列出两个包。有没有办法避免这种情况而不使用事务


谢谢。

出于好奇,如果显式指定主键,是否也会发生同样的情况?(而不是从序列中获取值。)我只是检查了一下,但结果是一样的。那听起来肯定像个bug。
(JE 5.0.73) Unique secondary key is already present
1 : package01
2 : package01