Jestem na maksymalnych podstawach jeśli chodzi o Javę i springa i mam problem z relacją (OneToOne) przy zapisywaniu z poziomu widoku. A mianowicie nie wiem do końca, w jaki sposób powinienem zdefiniować metodę z wykorzystaniem adnotacji @PostMapping i w jaki sposób widok mam to zapisać. Wiem że gdzieś robię błąd i sam kod jest kompletnym serem szwajcarskim, ale momentami zaczynają mi opadać ręce.
Model User:
@Entity
@Table(name = "user")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long userId;
@NotNull
private String username;
@NotNull
private String password;
@NotNull
private String email;
public User(){}
public User(String username, String password, String email) {
this.username = username;
this.password = password;
this.email = email;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Model UserDetails:
@Entity
@Table(name = "user_details")
public class UserDetails implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "userDetails_id")
private Long udId;
@NotNull
private String firstName;
@NotNull
private String lastName;
@NotNull
private String adress;
@OneToOne(cascade = CascadeType.ALL)
private User user;
public UserDetails(){}
public UserDetails(String firstName, String lastName, String adress) {
this.firstName = firstName;
this.lastName = lastName;
this.adress = adress;
}
public Long getUdId() {
return udId;
}
public void setUdId(Long udId) {
this.udId = udId;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getAdress() {
return adress;
}
public void setAdress(String adress) {
this.adress = adress;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
RegisterController:
@Controller
public class RegisterController {
private DetailsRepository detailsRepo;
private UserRepository userRepo;
@Autowired
public RegisterController(DetailsRepository detailsRepo, UserRepository userRepo) {
this.detailsRepo = detailsRepo;
this.userRepo = userRepo;
}
@GetMapping("/register")
public String registerView(Model mmodel){
mmodel.addAttribute("user", new User());
mmodel.addAttribute("details", new UserDetails());
return "register";
}
@PostMapping("/register/save")
public String register(@ModelAttribute User user, @ModelAttribute UserDetails userDetails){
userRepo.save(user);
userDetails.setUser(user);
detailsRepo.save(userDetails);
return "redirect:/";
}
}
Byłbym wdzięczny za poradę.