首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring数据REST MongoDB:检索DBRef的对象而不是href

Spring数据REST MongoDB:检索DBRef的对象而不是href
EN

Stack Overflow用户
提问于 2016-03-14 15:17:38
回答 1查看 2.3K关注 0票数 4

你好专家@ stackOverflow

我们正在使用。

是否有可能加载子对象,而不是使用@DBRef注释的超链接?请参考下面的Process.templates属性。

这是我们的模型:

代码语言:javascript
运行
复制
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;

import java.util.ArrayList;
import java.util.List;

@Document(collection = "process")
public class Process {
    @Id
    private String id;

    private String name;

    @DBRef ///////// ------> This is the corresponding attribute <------
    private List<MergeTemplate> templates = new ArrayList<>();

这是我们的仓库:

代码语言:javascript
运行
复制
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;

@RepositoryRestResource(collectionResourceRel = "process", path = "process")
public interface ProcessRepository extends MongoRepository<Process, String> {
}

FindAll API提供到子对象的链接。

代码语言:javascript
运行
复制
http://localhost:8080/data/process

带来以下JSON。

代码语言:javascript
运行
复制
{
  "_embedded" : {
    "process" : [ {
      "id" : "56d731b82b45ee21a0d2ab0a",
      "name" : "application-kit",
      "_links" : {
        ..., 
        /********** This is the attribute in question (templates) ************/
        "templates" : {
          "href" : "http://localhost:8080/data/process/56d731b82b45ee21a0d2ab0a/templates"
        }
      }
    }, ...]
}

我甚至试过@DBRef(lazy=false),但是没有运气。

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2016-03-14 16:13:09

你有两种可能性:

  1. 将您的MergeResult存储在Process文档中(我不知道它是否适用于您的情况,但即使您有大量的MergeResults,这也是最好的选择,因为@DBRef类似于SQL,而MongoDB对此并不擅长)
  2. 使用节选

使用摘录的

您可以通过以下步骤实现您的目标:

1)创建流程文档的投影

代码语言:javascript
运行
复制
@Projection(name = "inlineTemplates", types = { Process.class }) 
interface InlineTemplates {

  String getId();

  String getName();

  // using getTemplates() inside a projection causes the information to be inlined
  List<MergeTemplate> getTemplates(); 
}

2)编辑你的存储库

代码语言:javascript
运行
复制
@RepositoryRestResource(excerptProjection = InlineTemplates.class)
interface ProcessRepository extends CrudRepository<Process, String> {}

3)到http://localhost:8080/data/process查看结果

注意:我没有尝试代码,只需从文档中获取说明即可。如果不起作用的话很抱歉。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35991354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档