如何使用JavaSpring注释在MongoDB中创建一个完全填充的引用对象
当我将同一对象添加到MongoDB表的数组中的表时,我遇到了一个主要的唯一约束错误。我真的想要数组中的整个对象,而不仅仅是对它的引用 好的,我有一个book表,其中有很多书,每个书都有一个id作为主键,是唯一的 书桌:如何使用JavaSpring注释在MongoDB中创建一个完全填充的引用对象,java,mongodb,spring-boot,spring-data-jpa,Java,Mongodb,Spring Boot,Spring Data Jpa,当我将同一对象添加到MongoDB表的数组中的表时,我遇到了一个主要的唯一约束错误。我真的想要数组中的整个对象,而不仅仅是对它的引用 好的,我有一个book表,其中有很多书,每个书都有一个id作为主键,是唯一的 书桌: { "_id" : "1234-sc-myKey", "title" : "Tom Sawyer", "author" : "Mark Twain" } 然后我有一个存储表: { "_id" : "myStoreId-1", "name" : "book store
{
"_id" : "1234-sc-myKey",
"title" : "Tom Sawyer",
"author" : "Mark Twain"
}
然后我有一个存储表:
{
"_id" : "myStoreId-1",
"name" : "book store 1",
"books" : [
{
"_id" : "1234-sc-myKey",
"title" : "Tom Sawyer",
"author" : "Mark Twain"
},
{
"_id" : "5678-pc-myKey",
"title" : "Huck Finn",
"author" : "Mark Twain"
}
]
}
当我将同一本书添加到另一个存储区时,出现主键约束错误。我知道我可以在@DBRef处进行注释,并使存储表如下所示:
{
"_id" : "myStoreId-1",
"name" : "book store 1",
"books" : [
{
"$ref" : "Book",
"$id" : "1234-sc-myKey"
}
}
但是,我必须再次查询数据库,以获得每本书的标题列表。有没有一种方法既可以将书籍放在存储表中,又可以将唯一的主键放在书籍上?我确信有一个很酷的JavaSpring注释用于此,但我没有找到它
Java信息:
课堂用书
@JsonAutoDetect
@JsonIgnoreProperties(ignoreUnknown = true)
@Document(collection = "Book")
@CompoundIndexes({
@CompoundIndex(name = "pk_idx", def = "{'bookId':1, 'type': 1, 'myKey': 1}", unique=true)
})
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Book {
@Id
private String id;
etc...
}
类商店:
@JsonAutoDetect
@JsonIgnoreProperties(ignoreUnknown = true)
@Document(collection = "Store")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Store {
@Id
private String id;
private String name;
//this is the solution where it throws unique constraint
private List<Book> books;
//this is the solution I don't like
@DBRef
private List<Book> books;
}
@jsonautodect
@JsonIgnoreProperties(ignoreUnknown=true)
@文档(collection=“Store”)
@资料
@建筑商
@诺尔格构装师
@AllArgsConstructor
公共类商店{
@身份证
私有字符串id;
私有字符串名称;
//这是它抛出唯一约束的解决方案
私人书目;
//这是我不喜欢的解决方案
@DBRef
私人书目;
}
尝试添加@Reference
以上的私人列表书籍代码>在类中存储
是!非常感谢。这是我获取断开连接的完全填充引用所需的注释。非常感谢!