我有一个名为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;
答案 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);