Java hibernate@Id@GeneratedValue非自动递增,我没有序列
我有这样一种情况,即我尝试使用依赖于max id值的id持久化实体,例如,新实体id将是max(id)+1。 现在我尝试使用JPA来持久化这个实体Java hibernate@Id@GeneratedValue非自动递增,我没有序列,java,spring,hibernate,spring-mvc,jpa,Java,Spring,Hibernate,Spring Mvc,Jpa,我有这样一种情况,即我尝试使用依赖于max id值的id持久化实体,例如,新实体id将是max(id)+1。 现在我尝试使用JPA来持久化这个实体 @Entity @Table(name = "product") public class ProductDetails { @Id @GeneratedValue private String id; 我使用了strategy=GenerationType.AUTO,strategy=GenerationType.IDE
@Entity
@Table(name = "product")
public class ProductDetails {
@Id
@GeneratedValue
private String id;
我使用了
strategy=GenerationType.AUTO
,strategy=GenerationType.IDENTITY
,strategy=GenerationType.SEQUENCE
,strategy=GenerationType.TABLE
都不起作用,所以我想我可以通过选择max id then+1来解决这个问题,并使用我想要的值(我没有尝试过),有没有办法通过JPA或Hibernate来处理这种情况。注意:id列不是自动递增的,db没有顺序。不要使用字符串作为主键。如果您需要像“ABC123”这样的id,那么需要两个id列。一个作为id(int)PK,第二个作为display_id(String)。您可以使用触发器在数据库级别自动生成显示id 不要将字符串用作主键。如果您需要像“ABC123”这样的id,那么需要两个id列。一个作为id(int)PK,第二个作为display_id(String)。您可以使用触发器在数据库级别自动生成显示id 如果使用String
作为Id类型,则不应使用自动递增,因为String不是数字类型,因此不能递增。只需离开@Id
并添加@GeneratedValue(generator=“uuid”)
——这应该可以工作。
此外,您可以添加
@GenericGenerator(name=“uuid”,strategy=“uuid2”)
如果您使用字符串作为Id类型,则不应使用自动递增,因为字符串不是数字类型,因此不能递增。只需离开@Id
并添加@GeneratedValue(generator=“uuid”)
——这应该可以工作。
此外,您还可以添加@GenericGenerator(name=“uuid”,strategy=“uuid2”)
它不工作,因为它是一个字符串。如果使用Long,则GenerationType.AUTO
应该可以正常工作@XtremeBaumer不起作用也许这一个不起作用,因为它是一个字符串。如果使用Long,则GenerationType.AUTO
应该可以正常工作@XtremeBaumer不起作用也许这一个请理解这个问题。如果将id作为字符串,如何获得Max(id)?我理解这个问题,我不想使用Max(id),这就是另一个编写SQL的方式。我试图找出解决方案。我已将Id设置为long且strategy=GenerationType.AUTO,不起作用。请理解此问题。如果将id作为字符串,如何获得Max(id)?我理解这个问题,我不想使用Max(id),这就是另一个编写SQL的方式。我试图找出解决方案。我已经将Id设置为long,而strategy=GenerationType.AUTO不起作用