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 类型可以是StringObjectId(来自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 自动化配置

springboot:Spring boot中mongodb的使用

Spring Boot MongoDB 应用配置