如何使用 java spring 注释在 MongoDB 中创建一个完全填充的引用对象
Posted
技术标签:
【中文标题】如何使用 java spring 注释在 MongoDB 中创建一个完全填充的引用对象【英文标题】:How do I make a fully populated reference object in MongoDB using java spring annotations 【发布时间】:2019-11-23 12:48:33 【问题描述】:当我将相同的对象添加到我的 MongoDB 表中的数组中的表时,我遇到了主要的唯一约束错误。我真的想要数组中的整个对象,而不仅仅是对它的引用。
好的,所以我有一个书架,其中有很多书,每本书都有一个 id 作为唯一的主键。
书桌:
"_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"
但是我必须再次查询每本书的数据库以获得标题列表。有没有办法让书在 store 表中,但在书上也有唯一的主键?我确信有一个很酷的 java spring 注释,但我没有找到它。
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;
【问题讨论】:
【参考方案1】:尝试在private List<Book> books;
类Store
上方添加@Reference
【讨论】:
是的!谢谢你。这是我获得断开连接的完全填充参考所需的注释。非常感谢!以上是关于如何使用 java spring 注释在 MongoDB 中创建一个完全填充的引用对象的主要内容,如果未能解决你的问题,请参考以下文章
如何将基于 java 的注释 maven 项目转换为 Spring Boot?
Spring @transactional 是不是与 MongoDB 一起使用?