如何手动设置自动生成的ID?

时间:2017-07-14 12:00:02

标签: java hibernate jpa

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

有没有办法手动设置taskId?

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

4 个答案:

答案 0 :(得分:1)

@GeneratedValue注释不允许用户手动设置值。您可以手动生成如下所示的字符串格式,并使用@Id

标记taskId列,而不是使用该注释。
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);

这是创建一个包含列itemId和itemType.Save&#34; task&#34;的主表。分别列为0,检查最后输入的值,增加1并再次保存。

答案 1 :(得分:1)

使用

@GeneratedValue(strategy = GenerationType.IDENTITY)

示例: http://www.codejava.net/frameworks/hibernate/java-hibernate-jpa-annotations-tutorial-for-beginners

答案 2 :(得分:0)

This link 可以帮到你。

如果我正确理解你的问题,我会应用一个基本的解决方案。

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

答案 3 :(得分:0)

您可以手动初始化它。

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