【问题标题】:JPA @Id @GeneratedValue annotations vs DB primary key?JPA @Id @GeneratedValue 注释与数据库主键?
【发布时间】:2018-04-29 12:01:18
【问题描述】:

我有一个应用程序使用 JDBC 访问现有的 MySQL DB,并且正在转换为 JPA。我的数据库已经设置了自动生成的主键。当数据库中已经定义了我的实体类时,我是否需要用@Id、@GeneratedValue...注释?注释是否会覆盖/与已定义的数据库主键/索引发生冲突?

【问题讨论】:

    标签: jpa annotations


    【解决方案1】:

    我假设您在 MySQL 中使用自动编号,这些是自动生成的。

    以下代码将满足您的要求:

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "table_id")
    

    注意到GenerationType.IDENTITY 策略了吗?这告诉 JPA 使用自动生成的数据库值。

    【讨论】:

    • 我确实使用 GenerationType.IDENTITY 策略。我已经创建了带有带有 auto_increment 的对象 ID 主键的数据库。只是想确保 MySQL auto_incremement 和 JPA @GeneratedValue 不会冲突。谢谢!
    【解决方案2】:

    不会与数据库主键和JPA注解冲突。由于主键已经被索引,所以完全没有问题。

    你应该在实体类中添加注解,它不会与已经定义的数据库冲突。如果你在新的数据库环境中部署系统,那么必须需要注解。

    【讨论】:

    • 感谢您的确认!我认为是这种情况,但很高兴得到确认。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 2018-01-13
    • 2012-02-23
    相关资源
    最近更新 更多