【发布时间】:2021-05-24 15:33:38
【问题描述】:
我想用 Spring Data JPA 注册我的用户。我有这方面的类:Users、Authorities、UsersRepository(interface)、AuthoritiesRepository(interface) 和一个控制器,我从 AutoWired Repositories 调用 save 方法。
我的用户类:
@Entity
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String username;
private String password;
private int enabled = 1;
private static Users instance = null;
public static Users getInstance() {
if (instance == null) {
instance = new Users();
}
return instance;
}
protected Users() {}
public Users(String username, String password, int enabled) {
this.username = username;
this.password = password;
this.enabled = enabled;
}
public int getId() {
return id;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public int getEnabled() {
return enabled;
}
}
我的权威类:
@Entity
public class Authorities {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String username;
private String authority;
protected Authorities() { }
public Authorities(String username, String authority) {
this.username = username;
this.authority = authority;
}
public int getId() {
return id;
}
public String getUsername() {
return username;
}
public String getAuthority() {
return authority;
}
}
My UsersRepository 接口
public interface UsersRepository extends CrudRepository<Users, Integer> {
}
我的 AuthoritiesRepository 接口
public interface AuthoritiesRepository extends CrudRepository<Authorities, Integer> {
}
我的控制器类
@Controller
public class MyController {
@Autowired
private UsersRepository usersRepository;
@Autowired
private AuthoritiesRepository authoritiesRepository;
@Autowired
private ArticleRepository articleRepository;
@GetMapping("/register")
public String register(Model model) {
model.addAttribute("users", Users.getInstance());
return "register";
}
@PostMapping("/register")
public String registerSubmit(@ModelAttribute Users users) {
usersRepository.save(users);
Authorities authority = new Authorities(users.getUsername(), "read");
AuthoritiesRepository.save(authority);
return "redirect:/login";
}
}
我的注册.html
<!DOCTYPE html>
<html xmlns:th="https://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Register</title>
</head>
<body>
<h1>Register:</h1>
<form action="#" th:action="@{/register}" th:object="${users}" method="post">
<p>Username: <input type="text" th:field="*{username}" /></p>
<p>Password: <input type="password" th:field="*{password}" /></p>
<input type="hidden" th:field="*{enabled}" />
<p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>
</body>
</html>
我正在使用 Spring-Data-JPA 和 MySQL。例如,当我从注册页面添加新用户时,Id 会增加两次
ID:3 用户名:user1 密码:pass1
ID:5 用户名:user2 密码:pass2
İd:7 用户名:user3 密码:pass3
权威表中的 ID 也增加了两倍。 我想增加 1 的 id 值。
这个问题是因为我同时调用了不同的保存方法(在 registerSubmit 方法中)但是我必须将它保存在一起我无法改变这种行为。
【问题讨论】:
-
有人知道吗?我需要帮助吗?
-
我正在努力解决这个问题大约 5 个小时。我已经尝试过另一代主键策略。我还为此实施了一项服务,但不起作用。我与电报组的人讨论这个问题。没有人能解决这个问题。
-
我通过将AUTO_INCREMENT赋予所有表并将生成值策略设置为IDENTITY解决了这个问题
标签: spring jpa spring-security spring-data-jpa spring-data