dar*_*ord 3 spring spring-data spring-data-jpa
我正在尝试使用CrudRepository创建用户模型:
@Entity
public class User {
@Id
@GeneratedValue
private String username;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
public interface UserRepository extends CrudRepository<User, String> {
}
Run Code Online (Sandbox Code Playgroud)
但是,每次调用findOne()时,都会出现500错误:
@Controller
public class UserController {
@Autowired
private UserRepository users;
@Override
@RequestMapping(value="/register", method=RequestMethod.POST)
public @ResponseBody User register(@RequestBody User userToRegister) {
String username = userToRegister.getUsername();
User user = users.findOne(id);
if (user != null) {
return null;
}
User registeredUser = users.save(userToRegister);
return registeredUser;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我只是切换到长类型ID而不是用户名本身,则一切正常。我认为使用字符串作为id是很常见的。那么如何使这项工作呢?
我使用嵌入式hsql数据库。我没有写任何SQL代码。
问题是String username;用@Id和都注释了@GeneratedValue。@Id表示应该是主键,可以是String。但是,这@GeneratedValue意味着您希望系统在创建新记录时自动生成新密钥。当主键是整数,所有数据库都有顺序的概念时,这很容易(即使语法并不总是相同的)。但是,如果您希望String自动生成键,则必须定义自己的自定义生成器。
或者,如果您没有理由添加@GeneratedValue注释,只需按照Bohuslav Burghardt的建议将其删除
| 归档时间: |
|
| 查看次数: |
5647 次 |
| 最近记录: |