ArangoDB и velocypack, используя неизменяемые классы в качестве dtos - PullRequest
0 голосов
/ 09 июня 2018

Я начинаю использовать ArangoDB в качестве постоянного слоя для существующего Java SpringBoot (и SpringData) приложения.Существует много DTO, все из которых являются неизменяемыми классами (с использованием AutoValue).

Поэтому нет конструктора по умолчанию, и arango не может создать экземпляр dto для его заполнения из БД.

Можно ли сделать так, чтобы слой данных arango spring использовал Builder как способ создания экземпляра и заполнения класса (т. Е. Во время десериализации)

Можно ли использовать Джексона при использовании построителя dto при отмене вызова изjson, так что в качестве запасного варианта, можно ли настроить arango / java / springdata для использования jackson / json вместо velocypack ??

с благодарностью, Саймон

update1

Спасибо за быстрый ответ.Одна из сложностей, с которыми я сталкиваюсь, связана с автоматическим значением, сгенерированный конструктор будет закрытым, если есть конструктор.Я могу взять сгенерированный конструктор и получить конструктор, защищенный пакетами, но я также вижу это ...

com.arangodb.ArangoDBException: com.arangodb.velocypack.exception.VPackParserException: java.lang.InstantiationException: com.arangodb.springframework.core.convert.DBEntity
    at com.arangodb.internal.util.ArangoDeserializerImpl.deserialize(ArangoDeserializerImpl.java:59) ~[arangodb-java-driver-4.4.0.jar:na]
    at com.arangodb.internal.util.ArangoUtilImpl.deserialize(ArangoUtilImpl.java:92) ~[arangodb-java-driver-4.4.0.jar:na]
    at com.arangodb.internal.ArangoExecutor.deserialize(ArangoExecutor.java:120) ~[arangodb-java-driver-4.4.0.jar:na]
.....
Caused by: com.arangodb.velocypack.exception.VPackParserException: java.lang.InstantiationException: com.arangodb.springframework.core.convert.DBEntity
    at com.arangodb.velocypack.VPack.deserialize(VPack.java:398) ~[velocypack-1.1.0.jar:na]
    at com.arangodb.internal.util.ArangoDeserializerImpl.deserialize(ArangoDeserializerImpl.java:55) ~[arangodb-java-driver-4.4.0.jar:na]
    ... 128 common frames omitted
Caused by: java.lang.InstantiationException: com.arangodb.springframework.core.convert.DBEntity
    at java.lang.Class.newInstance(Class.java:427) ~[na:1.8.0_171]
    at com.arangodb.velocypack.VPack.createInstance(VPack.java:488) ~[velocypack-1.1.0.jar:na]
    at com.arangodb.velocypack.VPack.deserializeObject(VPack.java:450) ~[velocypack-1.1.0.jar:na]
    at com.arangodb.velocypack.VPack.getValue(VPack.java:569) ~[velocypack-1.1.0.jar:na]
    at com.arangodb.velocypack.VPack.deserialize(VPack.java:396) ~[velocypack-1.1.0.jar:na]
    ... 129 common frames omitted
Caused by: java.lang.NoSuchMethodException: com.arangodb.springframework.core.convert.DBEntity.<init>()
    at java.lang.Class.getConstructor0(Class.java:3082) ~[na:1.8.0_171]
    at java.lang.Class.newInstance(Class.java:412) ~[na:1.8.0_171]
    ... 133 common frames omitted

update2

Итак ...Оказывается, есть 2 разные проблемы, и ни одна из них на самом деле не является проблемой с реализацией данных arango sping (что мне кажется хорошим, лучше, чем то, что я видел для аналогичных БД документов / графиков смешанной модели) Во-первых, переделываем значение auto.класс для не использует сгенерированный построитель, означает, что сгенерированный класс защищен пакетом, и это работает хорошо, спасибо @Christian за это.

Второй - который я возьму кДругой вопрос - касается использования пружины (crudrepo) «save» для сохранения нового документа, но также для предоставления сгенерированного пользователем идентификатора.Эта проблема отличается от демаршаллинга до неизменного объекта, поэтому я начну новый вопрос для этого.

1 Ответ

0 голосов
/ 10 июня 2018

Вы можете сгенерировать конструктор (даже может быть защищен пакетом), который принимает все параметры (с вашей IDE или Lombok) вашего DTO.Если это не единственный конструктор внутри вашего DTO, аннотируйте конструктор с помощью @PersistenceConstructor.

UPDATE: Являются ли ваши классы DTO абстрактными и передаете ли вы их в Spring Data ArangoDB?Если да, это может быть причиной исключений, которые вы получаете.Вы должны передать сгенерированный конкретный класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...