В моем проекте Spring MVC я создал два класса, которые связаны как ManyToMany следующим образом:
Пользователи ( Id , баланс, фамилия и имя) -> Аренда ( UserID , MovieID ) <- Фильм (<strong> Id , название, режиссер и длина)
Читая о том, как это сделать, я закончилс этим кодом для обоих классов:
@Entity
@Table(name = "users")
public class Users implements Serializable {
@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name = "Rentals",
joinColumns = { @JoinColumn(name = "user_id") },
inverseJoinColumns = { @JoinColumn(name = "movie_id") } )
private Set<Movies> movies = new HashSet<>();
//--------------------------
@Entity
@Table(name = "movies")
public class Movies implements Serializable {
@ManyToMany(fetch = FetchType.LAZY,
cascade = { CascadeType.PERSIST, CascadeType.MERGE },
mappedBy = "movies")
private Set<Users> users = new HashSet<>();
Не только это, но я добавил hibernate.ddl-auto = create
и hibernate.hbm2ddl.auto=create-drop
к своим свойствам, чтобы таблицы создавались автоматически и обновлялись в моей базе данных PostgreSQL.
Проблема заключается в следующем.Мой MVC должен иметь возможность создавать, редактировать, обновлять и удалять любой фильм, пользователя и аренду.Я понимаю, что это можно заменить следующим образом: выбор пользователя, выбор фильма, добавление фильма в набор фильмов пользователя, добавление пользователя в набор пользователей фильма и сохранение.То же самое касается удаления или редактирования.
Но как мне решить эту проблему в моем JSP?Вот как я это делал, когда использовал класс Rentals, в котором были объекты Users и Movie:
<form:form action="${addAction}" modelAttribute="rental">
<table><tr><td>
<form:label path="user.usrid">
<spring:message text="ID User"/>
</form:label>
</td><td>
<form:select path="user.usrid">
<form:options items="${listUsers}" itemValue="usrid" itemLabel="fullName"/>
</form:select>
</td></tr><tr><td>
<form:label path="movie.movid">
<spring:message text="ID Movie"/>
</form:label>
</td><td>
<form:select path="movie.movid">
<form:options items="${listMovies}" itemValue="movid" itemLabel="title"/>
</form:select>
</td></tr>
<tr><td colspan="2">
<input type="submit" value="<spring:message text="Add Rental"/>" />
</td></tr>
</table></form:form>
И у контроллера были следующие методы:
@RequestMapping(value = "/rentals", method = RequestMethod.GET)
public String listRentals(Model model) {
model.addAttribute("rental", new Rentals());
model.addAttribute("listUsers", this.murService.getUsers());
model.addAttribute("listMovies", this.murService.getMovies());
model.addAttribute("listRentals", this.murService.getRentals());
return "rental";
}
@RequestMapping(value = "/rentals/add", method = RequestMethod.POST)
public String addRental(@ModelAttribute("rental") Rentals rnt) {
if (!checkIfExists(rnt)) {
this.murService.addRental(rnt);
} else {
System.out.println("Couldn't be added, rent already exists.");
}
return "redirect:/rentals";
}
Iиспользовал ModelAttribute для объекта Rentals, но теперь, когда у меня нет этого класса, на что должен указывать ModelAttribute?Если я прав в том, как, по моему мнению, это может быть, как я могу отправить два атрибута ModelAttributes, один в качестве пользователей и один в качестве фильмов?Или какой способ сделать то, что мне нужно?