我的对象:
@Entity
@Table(name="user")
public class User {
@Id
@Column(name="uid")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
//more code
}
当我在没有uid
的情况下POST
user
JSON
时,我收到错误,因为给定的 id 不得为空。当uid
应该由数据库生成时,情况不应该如此。请指出我错过了什么。
杰森:
{
"email": "john@mail.com",
"name": "John Doe",
"phone": "98-765-4445"
}
错误:
{
"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/"
}
这是我的错,我在将User
对象保存到数据库之前调用了foo(user.getId())
。 从中得出的结论是:@GeneratedValue(strategy=GenerationType.IDENTITY)
是正确的代码,并在保存到数据库1时生成相同的 ID。Long
不是问题。谢谢。
[1]:我通过以下方式将对象保存到数据库中,如下所示:userRepository.save(user)
。
要为主键生成字符串 uuid(我假设您正在尝试这样做(,您可以尝试以下代码:
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
private String id;
无论你在这个特定问题上做@GeneratedValue(strategy=GenerationType.IDENTITY)
还是@GeneratedValue(strategy=GenerationType.TABLE)
,都没有错。任何策略都有效。您所能确保的是当您通过id
时是否使用@PathVariable
。
当我在方法中缺少@PathVariable(value="id")
ID ID时findById()
方法遇到了同样的问题getIdSpecificResult()
。这是我代码上的一个小缺失部分。原因可能是任何