HIbernate: вставить много к одному: столбец ошибки не может быть нулевым - PullRequest
0 голосов
/ 03 марта 2019

Привет всем, у меня есть проблема, когда вставить сущность много к одному.проблема: я хочу вставить новую запись: staffId, тип, причина.Но записи таблицы и сотрудник имеют отношение много к одному, поэтому я не знаю, как вставить в эту таблицу с помощью класс DTO является сотрудник или сотрудник, и как я могу вставить это.Так много всего!

код ниже:

сущность сотрудника

@Entity
@Table(name = "STAFF")
public class Employee {
@Column(name = "DEPARTMENT_ID")
private Long departmentId;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(insertable = false, updatable = false)
private Department department;

сущность записей

@Entity
@Table(name = "Records", catalog = "Assignment")
public class Records implements java.io.Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;
private Long id;
private Employee Employee;
private boolean type;
private String reason;
private Date date;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "StaffId", nullable = false)
public Employee getEmployee() {
    return this.Employee;

RecordDTO \

В контроллере я не знаю, какой класс использовать, Form или открытый класс DTO RecordDto {

  /*=====================================================================================================
 *===== PRIVATE PROPERTIES                                                                        =====
 *=====================================================================================================*/

/**
 * trunglq_department.ID
 */
private Long id;

/**
 * trunglq_department.Employee
 */
private Employee Employee;

/**
 * trunglq_department.type
 */
private boolean type;

/**
 * trunglq_department.reason
 */
private String reason;

/**
 * trunglq_department.date
 */
private Date date;

RecordForm

public class RecordForm {

/*=====================================================================================================
 *===== PRIVATE PROPERTIES                                                                        =====
 *=====================================================================================================*/

/**
 * trunglq_department.ID
 */
private Long id;

/**
 * trunglq_department.Employee
 */
private int staffId;

/**
 * trunglq_department.type
 */
private boolean type;

/**
 * trunglq_department.reason
 */
private String reason;

/**
 * trunglq_department.date
 */
private Date date;

хранилище

@Override
public Long insert(Records record) {
    record.setDate(new Date());
    return (Long)super.insert(record);
}

сервис

@Override
public Long create(RecordForm recordForm) {
    recordForm.setStaffId(9);
    Records record = (Records) DataTransformUtil.transform(recordForm, Records.class);
    return (Long)recordRepository.insert(record);
}

Контроллер

В контроллере я не знаю, какой класс использовать, Форма или DTO

 @PostMapping("/create")
public String index(Model model, @ModelAttribute("formRecord") RecordForm recordForm,HttpServletRequest request) {
    recordService.create(recordForm);
    return "/employee/index";
}

JSP

jsp модально, я получаю данные в таблице, когда нажимаю на строку.в этом данные включают: staffId, тип, причину.Код ошибки нулевой StaffId.

form:form modelAttribute="formRecord" action="record/create"
                method="POST">
                <!-- Modal Header -->
                <div class="modal-header">
                    <h4 class="modal-title">
                        Ghi nhận nhân viên có ID:
                            <label class="idStaff"
                            style="font-size: 20px"></label>
                    </h4>
                    <button type="button" class="close" data-dismiss="modal">&times;</button>
                </div>

                <!-- Modal body -->

                <div class="modal-body">
                        <form:hidden path="staffId" class="idStaff"/>
                    <div class="custom-control custom-radio custom-control-inline">
                        <form:radiobutton path="type" class="custom-control-input"
                            id="customRadio" name="radioRecord" value="0" />
                        <label class="custom-control-label" for="customRadio">Achievement</label>
                    </div>
                    <div class="custom-control custom-radio custom-control-inline">
                        <form:radiobutton path="type" class="custom-control-input"
                            id="customRadio2" name="radioRecord" value="1" />
                        <label class="custom-control-label" for="customRadio2">Mistake</label>
                    </div>
                    <div class="form-group">
                        <label for="reason">Reason:</label>
                        <form:textarea class="form-control" rows="5" id="comment"
                            path="reason" />
                    </div>

                </div>

                <!-- Modal footer -->
                <div class="modal-footer">
                    <button type="submit" class="btn btn-success">Save</button>
                    <button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
                </div>
            </form:form>

Код ошибки

java.sql.SQLIntegrityConstraintViolationException: Column 'StaffId' cannot be null

1 Ответ

0 голосов
/ 03 марта 2019

В вашем сотруднике отсутствует идентификатор персонала (ПК).Кроме того, почему у вас есть идентификатор отдела, если у вас уже есть переменная отдела?

Ваша таблица может иметь значения staff_id, Department_id, staff_name и т. Д., Поэтому для многих к одному вам просто нужно добавить ссылку на внешний ключ, а в pojos вам нужно указать для joincolumn значение Department_id.похож на имеющуюся у вас запись.

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