Java 如何手动设置自动生成的Id?

Java 如何手动设置自动生成的Id?,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个名为Task的实体,它有taskId字段。问题是我需要创建/更新一些特定任务,而JPA autogenerator不允许我手动设置taskId。(它会覆盖我的taskId) 有没有办法手动设置taskId @Id @Column(name = "task_id") @GeneratedValue(generator = "system-uuid") @GenericGenerator(name = "system-uuid", strategy = "org.hibernate.id.U

我有一个名为Task的实体,它有taskId字段。问题是我需要创建/更新一些特定任务,而JPA autogenerator不允许我手动设置taskId。(它会覆盖我的taskId)

有没有办法手动设置taskId

@Id
@Column(name = "task_id")
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "org.hibernate.id.UUIDGenerator")
private String taskId;
我可以帮你

如果我正确理解了你的问题,我会采用基本的解决方案

@Column(name = "task_id", unique = true, nullable = false)
private String taskId;

@GeneratedValue批注不允许用户手动设置值。您可以手动生成一些字符串格式,如下面所示,并将taskId列标记为@Id,而不使用该批注

String hql = "from MasterCount where itemType=:type";
Query<MasterCount> query = session.createQuery(hql);
query.setParameter("type", "task");
MasterCount count = query.uniqueResult();
int lastId = count.getItemId() + 1;
count.setItemId(lastId);
task.setTaskId("task0"+lastId);
String hql=“from MasterCount,其中itemType=:type”;
Query=session.createQuery(hql);
query.setParameter(“类型”、“任务”);
MasterCount count=query.uniqueResult();
int lastId=count.getItemId()+1;
count.setItemId(lastId);
task.setTaskId(“task0”+lastId);

也就是说,创建一个主表,列为itemId和itemType。分别在列中保存“task”和0。检查最后输入的值,增加1,然后再次保存。

您可以手动初始化它

        @Id
        @Column(name= "id")
        @GeneratedValue
        private Long id = Long.parseLong(UUID.randomUUID().toString(), 16);
使用

例如:

JPA规范不允许用户在某些情况下设置,在其他情况下生成(因为
GeneratedValue
的定义是静态的)。一些JPA提供商确实支持它(DataNucleus不支持IIRC),但如果依赖它,则不可移植
@GeneratedValue(strategy = GenerationType.IDENTITY)