Я устанавливаю Spring Boot Aplication. Пытаюсь сделать make "добавить пользовательское меню", каждый раз, когда я публикую данные JSON, например:
MySQL всегда создает новую запись ADMIN в role_table
.
Мое намерение состоит в том, чтобы создать только одну запись администратора в role_table
для нескольких пользователей в user_table
(от одного до Мэнни)
До сих пор я пытался изменить несколько Spring JPA Annotation для разных видов извлечения,ассоциация и конфигурация.
Пока результат в моей таблице базы данных MySql такой:
role_table. user_table
id. role. id username role_id
1 Admin 1 Tony 1
2. User 2. Buddy. 2
3. Guest. 3. Liaska. 3
4. Admin 4. Roy. 5
5. Admin. 5. Subrey. 4
6. User. 6. Alhanus. 7
7. Guest 7. Rsidi. 6
Я ожидал, что результат в моей таблице MySql будет такой:
role_table. user_table
id. role. id username role_id
1 Admin 1 Tony 1
2. User 2. Buddy. 2
3. Guest. 3. Liaska. 3
4. Roy. 1
5. Subrey. 3
6. Alhanus. 1
7. Rsidi. 1
Спасибо вам всем
Класс роли такой:
public class Role implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name="id", length=8, unique = true)
private int id;
@Column(name = "role",nullable = false, unique = false)
private String role;
@OneToMany(mappedBy="role", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@Fetch(value = FetchMode.SUBSELECT)
private List<User> user = new ArrayList<User>();}
Класс пользователя такой:
public class User implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name="user_id", length=8, unique = true)
private int user_id;
@Column(name = "username", nullable = false, unique = true)
private String username;
@Column(name = "password", nullable = false, unique = true)
private String password;
@ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private Role role;}
Класс AdminController такой:
public class AdminController {
private static final Logger LOGGER = LoggerFactory.getLogger(AdminController.class);
@Autowired
private UserRepository userRepository;
@Autowired
private RoleRepository roleRepository;
private Role role = new Role();
@Autowired
private BCryptPasswordEncoder passwordEncoder;
@PreAuthorize("hasAnyRole('ADMIN')")
@PostMapping("/admin/add")
public String addUserByAdmin(@RequestBody User user){
String pwd = user.getPassword();
String encryptedPwd = passwordEncoder.encode(pwd);
user.setPassword(encryptedPwd);
if(userRepository.findByUsername(user.getUsername())==null){
userRepository.save(user);
} else {
return "user already exist
}
return "user added successfully ... ";
}