hibernate @Id @GeneratedValue非自动增量,我没有序列

时间:2017-06-01 12:19:03

标签: java spring hibernate spring-mvc jpa

我有这样的情况,我尝试持有依赖于最大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列不是自动递增而db没有序列

2 个答案:

答案 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")