#java #xodus
#java #xodus
Вопрос:
У меня есть этот пользовательский тип свойства:
public class EmbeddedEntityIterable implements Serializable, ByteIterable {
@NotNull
@Override
public ByteIterable subIterable(int offset, int length) {
return null;
}
@Override
public int compareTo(@NotNull ByteIterable o) {
return 0;
}
}
Как Xodus использует subIterable
и compareTo
? Безопасно ли просто возвращать нулевое значение для @NotNull
метода? EmbeddedEntityIterable
По сути, это Map<String,Comparable>
under the hood, который также является представлением очень вложенного объекта JSON.
Ответ №1:
Возврат небезопасен null
, и вы должны реализовать нетривиальный compareTo
. В противном случае вы не сможете использовать ваш ByteIterable
в качестве ключа (с хранилищами любого типа) и значения (с хранилищами, которые могут иметь дубликаты ключей). Если вы используете EntityStores API и your ByteIterable
в качестве значения свойства, то вам обязательно нужно реализовать методы, поскольку ByteIterable
они будут использоваться под капотом в качестве ключа в индексе значения свойства.
Для пользовательских реализаций ByteIterable
предпочтительнее наследовать от абстрактного класса ByteIterableBase, который имеет базовые реализации методов.
В addtiton, если вы определяете пользовательский тип свойства, вы должны определить order для поддержки готовых функций, таких как сортировка, поиск значения или поиск в диапазоне значений. Если вам не нужны эти функции, то, вероятно, имеет смысл сохранять такие данные в больших двоичных объектах или строках больших двоичных объектов вместо свойств.