繁体   English   中英

JPA 没有为实体生成 Id

[英]JPA not generating Id for entity

我有以下 class

  @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,其中包含文本和 creatorId。

据我了解,commentId 应该是通过调用空构造函数生成的。

在我的服务中,我执行以下操作

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

使用commentRepository是自动装配的JPARepository<Comment, Long>

问题是,没有生成 ID,并且尝试将 object 插入到我的数据库中时出现错误,ID 为 null。

@GeneratedValue(strategy = GenerationType.IDENTITY)

您正在使用GenerationType.IDENTITY这意味着IdentityGenerator期望由数据库中的标识列生成的值,这意味着它们是自动递增的。 使主键在数据库中自动递增以解决此问题。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM