Reputation: 3978
My object:
@Entity
@Table(name="user")
public class User {
@Id
@Column(name="uid")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
//more code
}
When I POST
user
JSON
without uid
, I am getting error as the given id must not be null. Which should not be the case while uid
should be generated by the database. Please point what am I missing.
JSON:
{
"email": "[email protected]",
"name": "John Doe",
"phone": "98-765-4445"
}
Error:
{
"timestamp": 1501058952038,
"status": 500,
"error": "Internal Server Error",
"exception": "org.springframework.dao.InvalidDataAccessApiUsageException",
"message": "The given id must not be null!; nested exception is java.lang.IllegalArgumentException: The given id must not be null!",
"path": "/api/user/"
}
Upvotes: 9
Views: 70001
Reputation: 11
Same issue encountered with findById()
method while I was missing @PathVariable(value="id")
ID id in getIdSpecificResult()
method. This was a minor missing piece on my code. Reasons could be any though.
Upvotes: 0
Reputation: 11
Nothing is wrong WHETHER you do @GeneratedValue(strategy=GenerationType.IDENTITY)
or @GeneratedValue(strategy=GenerationType.TABLE)
in this particular problem. Any strategy works. ALL you have make sure is @PathVariable
is used or not when you are passing id
.
Upvotes: 1
Reputation: 3978
It was my bad, I was calling foo(user.getId())
before saving the User
object into the database.
Takeaways from this: @GeneratedValue(strategy=GenerationType.IDENTITY)
is the correct code and generates identical ids while saving to database1. And Long
is not a problem. Thanks.
[1]: I am saving the object into the database by, something like: userRepository.save(user)
.
Upvotes: 15
Reputation: 6154
To generate string uuid's for primary keys (as I assume you are trying to do) you can try the following code:
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
private String id;
Upvotes: 0