我有这样的情况,我尝试持有依赖于最大id值的id的实体,例如新的实体id将是MAX(id)+1。 现在我尝试使用JPA来持久化这个实体
@Entity
@Table(name = "product")
public class ProductDetails {
@Id
@GeneratedValue
private String id;
我使用strategy = GenerationType.AUTO
,strategy = GenerationType.IDENTITY
,strategy = GenerationType.SEQUENCE
,strategy = GenerationType.TABLE
没有一个可以使用,所以我想我可以通过选择最大ID然后+1来解决它并使用那个值(我没试过)我要求的是,有没有办法通过JPA或Hibernate来处理这种情况。注意:id列不是自动递增而db没有序列
答案 0 :(得分:1)
不要将String用作主键。如果你需要像“ABC123”这样的id,那么需要2个id列。一个作为id(int)PK,第二个作为display_id(String)。您可以使用触发器在数据库级别自动生成display_id。
答案 1 :(得分:1)
如果您使用String
作为您的Id类型,则不应使用自动增量原因字符串是无法递增的,因为它不是数字类型。只需离开@Id
并添加@GeneratedValue(generator = "uuid")
即可。
此外,您可以添加@GenericGenerator(name = "uuid", strategy = "uuid2")