你好专家@ stackOverflow
我们正在使用。
是否有可能加载子对象,而不是使用@DBRef注释的超链接?请参考下面的Process.templates属性。
这是我们的模型:
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<>();这是我们的仓库:
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提供到子对象的链接。
http://localhost:8080/data/process带来以下JSON。
{
"_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),但是没有运气。
提前感谢!
发布于 2016-03-14 16:13:09
你有两种可能性:
MergeResult存储在Process文档中(我不知道它是否适用于您的情况,但即使您有大量的MergeResults,这也是最好的选择,因为@DBRef类似于SQL,而MongoDB对此并不擅长)使用摘录的
您可以通过以下步骤实现您的目标:
1)创建流程文档的投影
@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)编辑你的存储库
@RepositoryRestResource(excerptProjection = InlineTemplates.class)
interface ProcessRepository extends CrudRepository<Process, String> {}3)到http://localhost:8080/data/process查看结果
注意:我没有尝试代码,只需从文档中获取说明即可。如果不起作用的话很抱歉。
https://stackoverflow.com/questions/35991354
复制相似问题