Контроллер для отношения @OneToMany с использованием Spring Boot - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь разобраться с Spring Boot и базами данных.

Итак, у меня есть 2 сущности с @OneToMany отношениями:

@Entity
public class Team {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int teamId;

    @Column
    private String teamTitle;

    @Column
    private String teamCity;

    @ManyToOne
    @JoinColumn(name = "conferenceId", nullable = false)
    private Conference teamConference;

    public Team() { super(); } 

//some getters and setters
    }

И второй:

@Entity
public class Conference {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int conferenceId;

    private String conferenceTitle;

    @OneToMany(mappedBy = "teamId")
    private List<Team> conferenceTeams;

    public Conference() {
        super();
    }

//some getters and setters
}

JSP страница:

<body>
<form:form method="post" modelAttribute="team">
  <div>
    <form:label path="teamTitle">Title</form:label>
    <form:input path="teamTitle" type="text"/>
    <form:label path="teamCity">City</form:label>
    <form:input path="teamCity" type="text"/>

    //DAHELL IS HERE
    <div class="form-group">
      <label for="conferenceList">Select conference:</label>
      <select class="form-control" id="conferenceList">
        <c:forEach items="${conference}" var="conf">
          <option>${conf.conferenceTitle}</option>
        </c:forEach>
      </select>
    </div>

    <button type="submit" class="btn btn-success">Add</button>
  </div>
</form:form>

// jquery etc
</body>

И контроллер класса:

@Controller
public class TeamsController {

@Autowired
private TeamDAO teamDAO;

@Autowired
private ConferenceDAO conferenceDAO;

@RequestMapping(value = "/schedule", method = RequestMethod.GET)
public String showSchedule(ModelMap model) {

    model.put("conferences", conferenceDAO.findAll());
    model.put("teams", teamDAO.findAll());
    return "schedule";
}

@RequestMapping(value = "/new-team", method = RequestMethod.GET)
public String addNewTeam(ModelMap model) {
    model.addAttribute("conference", conferenceDAO.findAll());
    model.addAttribute("team", new Team());
    return "new-team";
}

@RequestMapping(value = "/new-team", method = RequestMethod.POST)
public String addTeam(ModelMap model, Team newTeam) {
    teamDAO.save(newTeam);
    return "redirect:/schedule";
}
}

ConferenceDAO и TeamDAO - это просто интерфейсы, расширенные из JpaRepository.

Так что я пытаюсь понять, как добавить новый Team. Я вставляю название и город на странице jsp, а также я должен выбрать, к какой конференции принадлежит эта команда. Но когда я нажимаю кнопку add, я получаю

There was an unexpected error (type=Internal Server Error, status=500).
No message available

Что я делаю не так? Я считаю, что что-то с selecting частью на jsp странице. И я на 100% уверен, что что-то упустил в своем классе Controller. Каким-то образом я должен сохранить новую команду в своей БД, а в столбце Conference также должно быть указано, что она содержит эту новую команду. Я был бы очень признателен, ребята, если бы вы показали мне, как выкопать.

1 Ответ

0 голосов
/ 09 ноября 2018

Так что да, комментарии действительно помогли. Так что для тех, кто это читает - спи на проблеме и читай логи, прежде чем задавать тупые вопросы (как я это делал: D) Проблема была в jsp странице и selection форме. Я получал Null за conferenceId, и я знал бы это, если бы я читал журналы. Поэтому комментарии о проверке трассировки всего стека и изменении jsp части выбора - работали для меня.

Исправлено jsp выбор:

<div class="form-group">
  <label for="conferenceList">Select conference:</label>
  <form:select path="teamConference" id="conferenceList">
      <form:options items="${conference}" itemLabel="conferenceTitle"/>
  </form:select>
</div>

Спасибо, ребята!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...