Witam wszystkich bardzo serdecznie!
Jest to mój pierwszy post na forum, mam nadzieję, że zostanę na dłużej!
Używam Spring, SpringMVC, Hibernate,Spring Data
Mamy dwie klasy, w dużym uproszczeniu:
@Entity
Customer
{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@OneToOne
private CustomerDetails customerDetails;
//settery i gettery standardowe
}
@Entity
CustomerDetails
{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@OneToOne
private Customer customer;
//settery i gettery standardowe
}
Jak powinno się łączyć te dwie tabele ze sobą?
Mianowicie, czy w kontrolerze powinno się tworzyć zarówno obiekt Customer i CustomerDetails, a następnie robić customer.set(customerDetails) np:
@Controller
class CustomerController
{
@Autowired
CustomerService service;
@Autowired
CustomerDetails serviceCD;
@GetMapping("/showForm")
public String showForm(Map<String,Object>model)
{
Customer customer=new Customer();
CustomerDetails cd=new CustomerDetails();
customer.setCustomerDetails(cd);
model.put("customer",new Customer());
return "new-customer";
}
@PostMapping("/add")
public String addCustomer(@ModelAttribute("customer") Customer customer)
{
service.saveCustomer(customer);
return "redirect:/customer/addDetails";
}
@RequestMapping("/addDetails")
public String addCustomerDetails(@ModelAttribute("customerDetails") CustomerDetails customerDt)
{
serviceCD.saveCustomer(customerDt);
return "redirect:/customer/home";
}
}
czy jest to niezgodne z wzorcem MVC? Czy jest inny/lepszy sposób? Jak to się robi w rzeczywistości(Komercyjne projekty/projekty doświadczonych programistów). Trochę internetu przeszukałem, zobaczyłem jakieś tutoriale na yt i właśnie taki sposób był prezentowany, jednak wiem, że nie powinno się umieszczać logiki( o ille jest to logika biznesowa ( użycie settera w modelu) ?) w modelu i stąd moje pytanie, czy jest to dobra praktyka, czy robi się to zupełnie inaczej. Jeśli tak to jak?