Spring Data ArangoDB: спасти родителя и ребенка вместе - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь создать свою Java интерпретацию Spring Boot для сохранения узлов ArangoDB. Мой код выглядит так, как показано ниже Asset. java

@Data
@Document("assets")
public class Asset {

    @Id
    String key;
    String name;
    String description;
    String path;
    LocalDateTime imported_at;
}

и AssetContent. java as

@Data
@Document("asset_contents")
public class AssetContent {

    @Id
    String key;
    String name;
    String extension;
    String content;
}

ChildOf. java, чтобы указать связь между Asset и AssetContent

@Data
@Edge("edges")
public class ChildOf<T1, T2> {

    @Id
    private String id;

    @From
    private T1 child;

    @To
    private T2 parent;

    public ChildOf(final T1 child, final T2 parent) {
        super();
        this.child = child;
        this.parent = parent;
    }
}

, где один актив имеет несколько активов. Теперь я хочу достичь трех целей:

  1. Сохранить актив и список содержимого актива вместе.
  2. Получить актив, используя репозиторий AssetContent.
  3. Получить список содержимое активов с использованием AssetRepository.

Поскольку я новичок в ArangoDB, а также из-за ограниченной документации. Может ли кто-нибудь помочь мне с изменениями, которые я должен внести в код?

1 Ответ

0 голосов
/ 23 июля 2020
  1. Spring Data ArangoDB не обрабатывает каскадные операции. Таким образом, если вы сохраните родителя, ребенок не будет сохранен автоматически. Вы можете реализовать такую ​​функциональность самостоятельно, выполнив 2 операции последовательно, но учтите, что в этом случае нет поддержки транзакций (https://github.com/arangodb/spring-data/issues/80).

  2. В чтобы следовать по краю от дочернего к родительскому, вы можете использовать аннотацию @Relations (https://www.arangodb.com/docs/stable/drivers/spring-data-reference-mapping-relations.html). В любом случае вы можете вернуть Asset из AssetContentRepository, например:

public interface AssetContentRepository extends ArangoRepository<AssetContent, String> {

    @Query("<your AQL query returning Asset>")
    Asset findAsset(AssetContent assetContent);

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