【问题标题】:hibernate @Id @GeneratedValue with non auto-increment and i dont have sequence休眠@Id @GeneratedValue 具有非自动增量并且我没有序列
【发布时间】:2017-06-01 12:19:03
【问题描述】:

我有一种情况,我尝试使用取决于最大 id 值的 id 来持久化实体,例如,新实体 id 将为 MAX(id)+1。 现在我尝试使用 JPA 来持久化这个实体

@Entity
@Table(name = "product")
public class ProductDetails {

    @Id
    @GeneratedValue
    private String id;

我使用了strategy = GenerationType.AUTOstrategy = GenerationType.IDENTITYstrategy = GenerationType.SEQUENCEstrategy = GenerationType.TABLE 它们都不起作用,所以我认为我可以通过选择最大 id 然后 +1 并使用该值来解决它(我没有尝试过) 我要问的是,有没有办法通过 JPA 或 Hibernate 来处理这种情况。注意:id 列不是自动递增的,数据库没有序列。

【问题讨论】:

标签: java spring hibernate spring-mvc jpa


【解决方案1】:

不要使用字符串作为主键。如果您需要像“ABC123”这样的 id,那么取 2 个 id 列。一个作为 id(int) PK,第二个作为 display_id(String)。您可以使用触发器在数据库级别自动生成 display_id。

【讨论】:

  • 请理解问题。如果您将 id 作为 String ,您如何获得 Max(id) ?
  • 我理解这个问题,我不想使用 Max(id),这就是另一个人编写 SQL 的方式。我试图找出解决方案。我已经将 ID 设置为 long 和 strategy = GenerationType.AUTO,没有工作
【解决方案2】:

如果您使用 String 作为您的 Id 类型,则不应使用自动递增,因为 String 不是数字类型,因此无法递增。离开@Id 并添加@GeneratedValue(generator = "uuid") - 这应该可以。 另外你可以添加@GenericGenerator(name = "uuid", strategy = "uuid2")

【讨论】:

    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 2011-03-25
    • 2014-01-27
    • 2016-09-01
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多