我想用springdatajpa注册我的用户。我有这样的类:users、authorities、usersrepository(interface)、authoritiesrepository(interface)和一个控制器,我从autowired存储库中调用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;
}
}
我的用户存储界面
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数据jpa和mysql。例如,当我从register page.id添加新用户时,会增加两次
编号:3username:user1 password:通过1
编号:5username:user2 password:密码2
我̇d:7分username:user3 password:通过3
身份证在官方表格中也增加了两倍。我想增加1的id值。
这个问题的原因是我在同一时间调用了不同的save方法(在registersubmit方法中),但是我必须将它保存在一起,我不能改变这个行为。
1条答案
按热度按时间krugob8w1#
您要使用的解决方案
AUTO_INCREMENT
而不是AUTO
是一个很好的方法,因为它也避免了使用的低效性TABLE
mysql的hibernate默认为哪个。您可能希望坚持使用基于表或序列的id,您需要为每个具有这样一个id的表提供一个专用的序列,因为默认情况下,它们都使用相同的序列。
另一方面,您不应该真正关心序列值的连续性,因为一旦发生回滚,就会出现间隙,避免间隙会在应用程序上造成瓶颈。