7

I have an entity called Task and it has taskId field. Problem is I need to create/update some specific tasks and JPA autogenerator doesn't allow me to set taskId manually.(It overrides my taskId)

Is there any way to set taskId manually?

@Id
@Column(name = "task_id")
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "org.hibernate.id.UUIDGenerator")
private String taskId;
Neil Stockton
  • 11,383
  • 3
  • 34
  • 29
hellzone
  • 5,393
  • 25
  • 82
  • 148
  • The JPA spec doesn't allow for a user wanting to set under some situation and generate under others (since the definition of `GeneratedValue` is static). Some JPA providers do support it (DataNucleus does IIRC) but non-portable if relying on it – Neil Stockton Jul 14 '17 at 12:45
  • Does this answer your question? [set Id (PK) generation value auto and manual](https://stackoverflow.com/questions/18182826/set-id-pk-generation-value-auto-and-manual) – miken32 Aug 13 '22 at 16:19

5 Answers5

3

Using

@GeneratedValue(strategy = GenerationType.IDENTITY)

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

Bugs
  • 4,491
  • 9
  • 32
  • 41
Quockhanh Pham
  • 384
  • 2
  • 11
2

@GeneratedValue annotation doesn't allow the user to set the value manually.Instead of using that annotation you can manually generate some string format like below and mark the taskId column with @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);

That is create a master table with columns itemId and itemType.Save "task" and 0 in the columns respectively.Check the last entered value ,increment one and save again.

TheHound.developer
  • 396
  • 1
  • 3
  • 16
2

you can initialize it manually.

        @Id
        @Column(name= "id")
        @GeneratedValue
        private Long id = Long.parseLong(UUID.randomUUID().toString(), 16);
dhyanandra singh
  • 1,071
  • 2
  • 18
  • 38
1

This link may help you.

I would apply a basic solution if I understood your problem correctly.

@Column(name = "task_id", unique = true, nullable = false)
private String taskId;
memoricab
  • 425
  • 1
  • 7
  • 28
0

Just implement org.springframework.data.domain.Persistable;

After too much finding and frustration i have used this and worked for my R2DBMS entity

@Table(name = "...")
public class .... implements Persistable<String> {

   ...

   public boolean isNew(){
     return id==null; //modify and set your logic
   }

}