【问题标题】:Spring Data JPA (Hibernate) is not creating column as autoincrementSpring Data JPA(Hibernate)没有将列创建为自动增量
【发布时间】:2018-04-25 04:12:09
【问题描述】:

为什么此映射无法将列 ID 创建为自动增量?

@Entity(name = "user_role")
public class UserRole {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", nullable = false, unique = true)
    private Long id;

    @OneToOne(cascade = CascadeType.MERGE, targetEntity = Role.class)
    @JoinColumn(name = "role_id")
    private Role role;

    @OneToOne(cascade = CascadeType.MERGE, targetEntity = User.class)
    @JoinColumn(name = "user_id")
    private User user;
}

提前致谢!

【问题讨论】:

  • "AUTO" 没有告诉 JPA 创建一些东西 "AUTO_INCREMENT";它告诉 JPA 提供者使用它想要的任何策略,所以你得到你所得到的。 “IDENTITY”等价于 AUTO_INCREMENT。
  • 我尝试使用 IDENTITY,但得到了相同的结果。我不明白!
  • 当您告诉人们您如何指示您的 JPA 提供者生成表格时,以及当您告诉人们发布了什么 DDL 时,人们可以提供建议。哦,至少要提到哪个 JPA 提供者
  • @DN1 完全正确。尝试删除表并再次运行您的项目。
  • 所以你没有使用 JPA 机制来生成模式,而是使用 Hibernate 特定机制...

标签: mysql hibernate spring-boot spring-data spring-data-jpa


【解决方案1】:

好吧,只是为了帮助人们。

问题是我的实体“user_role”的名称,我不知道为什么,但是在将实体名称更改为“userrole”后一切正常,并且 id 列被创建为 AUTOINCREMENT。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    要在 MySQL 中使用 AUTO_INCREMENT 列,您应该使用 IDENTITY 策略:

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "id", nullable = false, unique = true)
    private Long id;
    //Your code
    

    要了解更多信息,请查看此Link 明确提到了

    IDENTITY 策略还在提交期间为每个新实体对象生成一个自动值。

    【讨论】:

    • 感谢您的回答,但不适用于 AUTO 和 IDENTITY。
    • 是的.. 删除这两个 nullable = false, unique = true 并请告诉我它现在是否有效。 @EleazarEnrique
    • 感谢您的帮助,我会将此答案标记为替代答案。
    猜你喜欢
    • 2017-05-29
    • 2021-02-13
    • 2021-09-15
    • 2011-06-08
    • 2017-07-17
    • 1970-01-01
    • 2019-07-20
    • 2016-06-26
    • 2016-10-15
    相关资源
    最近更新 更多