【问题标题】:Spring Boot MongoDB: Can @GeneratedValue and @Column annotations be used?Spring Boot MongoDB:可以使用@GeneratedValue 和@Column 注解吗?
【发布时间】: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

标签: java spring mongodb spring-boot


【解决方案1】:

id 类型可以是StringObjectId(来自Mongo 驱动程序),注解为@Id(来自Spring data commons),Spring Data MongoDB 将在持久化此文档时自动填充此字段。

检查my simple Spring Mongo examplethe real world like example

通常,@GeneratedValue 来自 JPA,仅用于 JPA 实体。如果您想在 noSQL 上使用 JPA 类似的 API,请查看 Hibernate OGM

【讨论】:

    【解决方案2】:

    当我们使用 MongoDB 作为 Spring Boot 应用程序的数据库时,我们不能在模型中使用 @GeneratedValue 注释,因为它不可用。因此,我们需要一种方法来产生与使用 JPA 和 SQL 数据库时相同的效果。

    使用此作为更多参考 - click

    【讨论】:

      猜你喜欢
      • 2019-02-21
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 2021-05-18
      • 1970-01-01
      • 2013-08-02
      • 2017-02-23
      • 2018-07-16
      相关资源
      最近更新 更多