У меня есть странная проблема с использованием поля UUID в классе.Поле UUID не хранится NeoDatis
Я использую NeoDatis для сохранения объектов в базе данных, и это работает нормально, за исключением того, что значение поля извлеченных экземпляров не равно тому, что было, когда я сохраняю объект.
В частности, наименьшиеSigBits и mostSigBits одинаковы в извлеченном экземпляре и в исходном, но поле «вариант» отличается!
Я предполагаю, что Neodatis не хранит поле вариантов, поскольку оно отмечено как переходное, но странно, что поле задается только функцией variant(), которая лениво вычисляет его, основываясь только на значениях из наименьших значений SigBits и mostSigBits , Имея эти два поля с одинаковым значением, я ожидал бы получить такое же значение и для поля варианта, но вместо этого получаю значение 2 в моем исходном объекте и 0 на моих сохраненных и извлеченных объектах.
Оба экземпляра разрешают одно и то же значение String, поэтому я мог бы пропустить проблему, сохранив строковое представление UUID, но я бы предпочел понять, что происходит не так.
EDIT:
Я написал тестовый класс, который воспроизведет проблему:
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();
}
}
}
Спасибо, Бруно. Я больше не работаю над этим проектом, но в любом случае надеюсь, что ваш ответ поможет будущим пользователям Neodatis. –