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

标签 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;

最佳答案

@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 列的主表。分别在列中保存“任务”和 0。检查最后输入的值,增加 1 并再次保存。

关于java - 如何手动设置自动生成的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45102456/

相关文章:

java - Criteria API - OR 比较器,比较次数未知

java - 使用 ZipOutputStream 创建的 .war 文件无法部署

java - SP 返回的结果集 - SQL Server - Java

java - @ManyToMany 映射不会更新相应的表

mysql - Tomcat 在每次启动时创建新的数据库 session + mysql

java - 如何在 Spring Boot 中限制仅 5 个设备的登录?

java - 对涉及无主关系的实体进行持久更改的问题

java - Vaadin Designer 不是可编辑的自定义组件

java - 无法从 base64 字符串中获取完整的图像质量

java - 如何查看 Hyperledger Fabric 链码中的 java 日志?