Spring Boot MongoDB:可以使用@GeneratedValue 和@Column 注解吗?
Posted
技术标签:
【中文标题】Spring Boot MongoDB:可以使用@GeneratedValue 和@Column 注解吗?【英文标题】:Spring Boot MongoDB: Can @GeneratedValue and @Column annotations be used? 【发布时间】:2021-12-12 09:16:47 【问题描述】:我一直在学习如何在 Spring Boot 中使用 MongoDB;为此,我正在尝试构建一个允许在论坛中发送帖子和评论帖子的服务。目前我已经为论坛帖子创建了一个模型类:
@Document
@Data
public class ForumPost
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long postId;
private Long userId;
private String postTitle;
private String postContent;
@DbRef
private List<Comment> comments;
private Instant createTime;
private Instant updateTime;
在像 PostgreSQL 这样的 RDBMS 中,我将使用 @GeneratedValue
自动生成 ID 值,并使用 @Column
为每个变量定义列定义和其他设置,例如 updatable
。但这可以使用 Spring Data MongoDB 实现吗?有没有等价的注解可以达到同样的效果?
【问题讨论】:
Mongo 会自动为你生成一个 ID。通常使用 Mongo OID 类型(在 Java 中使用String
)而不是 Long
。
【参考方案1】:
id 类型可以是String
或ObjectId
(来自Mongo 驱动程序),注解为@Id
(来自Spring data commons),Spring Data MongoDB 将在持久化此文档时自动填充此字段。
检查my simple Spring Mongo example 和the real world like example。
通常,@GeneratedValue
来自 JPA,仅用于 JPA 实体。如果您想在 noSQL 上使用 JPA 类似的 API,请查看 Hibernate OGM。
【讨论】:
【参考方案2】:当我们使用 MongoDB 作为 Spring Boot 应用程序的数据库时,我们不能在模型中使用 @GeneratedValue 注释,因为它不可用。因此,我们需要一种方法来产生与使用 JPA 和 SQL 数据库时相同的效果。
使用此作为更多参考 - click
【讨论】:
以上是关于Spring Boot MongoDB:可以使用@GeneratedValue 和@Column 注解吗?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot MongoDB:可以使用@GeneratedValue 和@Column 注解吗?
spring boot系列spring boot 使用mongodb
Spring Boot:Spring Boot 中 MongoDB 的使用
[Carefree MongoDB] Spring Boot MongoDB 自动化配置