Как обрабатывать внешний ключ 1: N для CRUD в Spring MVC / Hibernate? - PullRequest
1 голос
/ 21 мая 2019

Я пытаюсь создать форму для обновления веб-приложения CRUD.Классы, связанные с моим вопросом, связаны в базе данных MySQL 1: N .

У меня возникла проблема с поиском элегантного решения для приведения параметра отдела к правильному типу.Я мог бы создать уродливый обходной путь с помощью jsp формы, но я хотел бы знать, что такое стандартное 1008 * SpringMVC / Hibernate.

У меня есть следующие классы сущностей Hibernate, Сотрудник и Отдел , реализованный со следующим кодом:

@Entity
@Table(name="employee")
public class Employee {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @JoinColumn(name = "ID_DEPT", referencedColumnName = "ID_DEPT")
    @ManyToOne(optional = false)
    private Department deptId;
 ...
}

Обновление выполняется посредством запроса на отправку в файле jsp следующим образом:

                    <form:hidden path="idEmployee" />

                    <div class="form-group">
                        <label for="deptid" class="col-md-3 control-label">Department</label>
                        <div class="col-md-9">
                            <form:input path="deptId" cssClass="form-control" />
                        </div>
                    </div>  
....

Запрос на отправку не предоставит правильный тип для deptId , что приводит к ошибке несоответствия типов.

Код контроллера для действия saveEmployee:

@PostMapping("/saveEmployee")
public String saveDisciplina(@ModelAttribute("employee") Disciplina theDisciplina) {
    return "redirect:/employee/list";
}

Соответствующий код, касающийся EmployeeDAO:

@Override
public void saveEmployee(Employee theEmployee) {
    Session currentSession = sessionFactory.getCurrentSession();
    currentSession.saveOrUpdate(theEmployee);
}

Где и как мне правильно обрабатывать параметры сообщения?

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Я думаю, что вы, возможно, ошибаетесь в понимании объединенной сущности, потому что java хранит ссылку на сущность.и вы должны найти его в спящем режиме со ссылкой при обновлении.

Посмотрите на этот пример, и я надеюсь, что он может вам помочь:

https://www.callicoder.com/hibernate-spring-boot-jpa-one-to-many-mapping-example/

0 голосов
/ 23 мая 2019

На самом деле нужно изменить только эту строку в форме обновления jsp: <form:input path="deptId" cssClass="form-control" />

Правильный путь в этом случае будет path=deptId.deptId.Это вызывает соответствующий конструктор для класса Department , который, в свою очередь, создает экземпляр объекта Department , который будет сохранен как часть объекта Employee , который его содержит.

Жаль, что у такой замечательной функциональности такая плохая документация.Весенний новичок может легко чувствовать себя разбитым.Единственная причина, по которой я включил этот абзац, заключается в том, что, возможно, кто-то прокомментирует ссылку, указывающую на надлежащую документацию Spring, поскольку я не смог найти ни одной, которая бы соответствовала моим потребностям.

Кто-то, пожалуйста, исправьте мое решение, если оно неправильное, но до сих пор я пробовал это с формами для создания и обновления действий, и он отлично работает.

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