Java JPA未为实体生成Id

Java JPA未为实体生成Id,java,jpa,spring-data-jpa,Java,Jpa,Spring Data Jpa,我有以下课程 @Entity public class Comment { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "comment_id") private Long commentId; @Column(name = "creator_id") private Long creatorId;

我有以下课程

  @Entity
  public class Comment {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "comment_id")
    private Long commentId;

    @Column(name = "creator_id")
    private Long creatorId;

    @Column(name = "text")
    @ApiModelProperty(value = "Text des Kommentar")
    private String text;

    @Column(name = "timestamp")
    @ApiModelProperty(value = "Zeitstempel der letzten Bearbeitung")
    private String timestamp;


    protected Comment() {}
    
    public Comment(CommentDto dto) {
      this();
      updateComment(dto);
    }

    private void updateComment(CommentDto dto) {
      setText(dto.getText());
      setCreatorId(dto.getCreatorId());
      setTimestamp(UtilService.getTimestampString());
    }
我从HTTP请求中得到一个CommentDto,该请求由文本和创建者ID组成

据我所知,commentId应该通过调用空构造函数生成

在我的服务中,我做了以下几点

public void addComment(CommentDto comment) {
  Comment commentEntity = new Comment(comment);
  commentRepository.save(commentEntity);
}

commentRepository
是一个自动连接的
JPARepository

问题是,没有生成ID,并且我在尝试使用空ID将对象插入数据库时出错

@GeneratedValue(strategy = GenerationType.IDENTITY)
您使用的是
GenerationType.IDENTITY
这意味着
IdentityGenerator
需要数据库中标识列生成的值,这意味着它们是自动递增的使数据库中的主键自动递增以解决此问题。

或者您可以使用默认策略
GenerationType.AUTO
。在提交期间,自动策略使用全局数字生成器为每个新实体对象生成主键。这些生成的值在数据库级别是唯一的,永远不会被回收

@Id
@GeneratedValue
@Column(name = "comment_id")
private Long commentId;
您使用的是
GenerationType.IDENTITY
这意味着
IdentityGenerator
需要数据库中标识列生成的值,这意味着它们是自动递增的使数据库中的主键自动递增以解决此问题。

或者您可以使用默认策略
GenerationType.AUTO
。在提交期间,自动策略使用全局数字生成器为每个新实体对象生成主键。这些生成的值在数据库级别是唯一的,永远不会被回收

@Id
@GeneratedValue
@Column(name = "comment_id")
private Long commentId;

第一个提议非常好,非常感谢:)第一个提议非常好,非常感谢:)