【发布时间】:2020-06-26 08:48:35
【问题描述】:
所以我正在整理我的小型 Spring 项目,但由于某种原因,我注意到 @OneToOne 注释没有为我完成它的工作,这反过来又导致另一个模型出现问题。
github 链接:https://github.com/eamonmckelvey/sports-app
基本上,我有一个用户模型类、一个团队模型类和一个玩家模型类。 我希望只有一个用户能够创建一个团队,而一个团队可以拥有许多玩家。 但是,我可以根据需要向我的用户添加任意数量的团队,这是错误的。
提供的所有答案都要求我为我的用户类添加一个无参数构造函数和一个构造函数,但是当我这样做时,我从类中注册时出错。
请帮忙。
1。用户模型
@Entity
@Data
@NoArgsConstructor(access= AccessLevel.PRIVATE, force=true)
@RequiredArgsConstructor
public class User implements UserDetails {
@OneToOne(cascade = CascadeType.ALL,mappedBy = "user")
private Team team;
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
private final String username;
private final String password;
//private final String fullname;
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return Arrays.asList(new SimpleGrantedAuthority("ROLE_USER"));
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
2。团队模型
@Data
@Entity
@Table(name="User_Team")
public class Team implements Serializable {
@OneToOne(fetch= FetchType.LAZY)
private User user;
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
//@NotBlank(message="Team Name is required")
private String teamName;
//@NotBlank(message="Location is required")
private String location;
//@NotBlank(message="Nickname required")
private String nickName;
private String yearEstablished;
public Sport sport;
private Divison divison;
3。团队控制器
@Slf4j
@Controller
@SessionAttributes("Team")
public class TeamController {
private TeamRepository teamRepository;
public TeamController(TeamRepository teamRepository) {
this.teamRepository = teamRepository;
}
@Autowired
TeamRepository service;
@GetMapping("/team")
public String displayTeam(Model model) {
model.addAttribute("team", service.findAll());
return "/team";
}
@GetMapping("/addTeam")
public String showSignUpForm(User user) {
return "addTeam";
}
@PostMapping("/addTeam")
public String processOrder(@Valid Team team, BindingResult result, SessionStatus
sessionStatus,
@AuthenticationPrincipal User user, Model model) {
if (result.hasErrors()) {
return "addTeam";
}
team.setUser(user);
service.save(team);
model.addAttribute("team", service.findAll());
return "team";
}
4。登记表
@Data
public class RegistrationForm {
private String username;
private String password;
//private String fullname;
public User toUser(PasswordEncoder passwordEncoder) {
return new User(
username, passwordEncoder.encode(password));
}
}
5。注册控制器
@Controller
@RequestMapping("/register")
public class RegistrationController {
private UserRepository userRepo;
private PasswordEncoder passwordEncoder;
public RegistrationController( UserRepository userRepo,
PasswordEncoder passwordEncoder){
this.userRepo = userRepo;
this.passwordEncoder = passwordEncoder;
}
@GetMapping
public String registerForm(){
return "registration";
}
@PostMapping
public String processRegistration(RegistrationForm form){
userRepo.save(form.toUser(passwordEncoder));
return "redirect:/login";
}
6。用户详情类
@Service
public class UserRepositoryUserDetailsService implements
UserDetailsService {
private UserRepository userRepo;
@Autowired
public UserRepositoryUserDetailsService(UserRepository userRepo) {
this.userRepo = userRepo;
}
@Override
public UserDetails loadUserByUsername(String username) throws
UsernameNotFoundException {
User user = userRepo.findByUsername(username);
if (user != null) {
return user;
}
throw new UsernameNotFoundException(
"User '" + username + "' not found");
}
【问题讨论】:
标签: java sql spring spring-data-jpa hibernate-mapping