我在类中使用UUID字段时遇到了一个奇怪的问题。
我正在使用NeoDatis将对象持久保存到数据库,这工作正常,除了检索到的实例的字段值不等于我保存对象时的值。
特别是,在检索到的实例和原始实例中,leastSigBits 和 mostSigBits 是相同的,但“variant”字段不同!
我假设 Neodatis 不存储变量字段,因为它被标记为瞬态,但奇怪的是该字段仅由variant()函数设置,该函数仅根据来自 minimumSigBits 和 mostSigBits 字段的值懒惰地计算它。让这两个字段具有相同的值,我希望变量字段也能获得相同的值,但是我在原始对象中获得了 2 的值,而在我的存储和检索对象中获得了 0 的值。
两个实例都解析为相同的字符串值,因此我可以通过存储 UUID 的字符串表示来跳过该问题,但我更愿意了解发生了什么问题。
编辑:
我写了一个重现问题的测试类:
public class TestObj {
public UUID getId() {
return id;
}
private final UUID id = UUID.randomUUID();
@Test
public static void storeAndRetrieve() {
TestObj o = new TestObj();
ODB odb = ODBFactory.open("tested.db");
try {
odb.store(o);
} finally {
odb.close();
}
odb = ODBFactory.open("tested.db");
try {
TestObj o2 = odb.<TestObj>getObjects(TestObj.class).getFirst();
Assert.assertEquals(o2.getId().toString(), o.getId().toString());
Assert.assertEquals(o2.getId(), o.getId()); /*this one fail!*/
} finally {
odb.close();
}
}
}