Ошибка обновления JPA из-за @OneToMany - PullRequest
0 голосов
/ 13 января 2019

У меня очень небольшое сомнение относительно отображения @OneToMany.

У меня есть модель студента и другая модель посещаемости.

Студент может иметь несколько посещений. но модель студента должна иметь возможность только получать информацию о посещаемости.

Но когда я пытаюсь изменить какую-либо информацию об ученике, я получаю ошибку ниже, поскольку она пытается обновить запись о посещаемости.

вот мое отображение

@Entity
@Table(name="student_detail")
@Getter @Setter
public class StudentDetailsModel {

    @Id
    @Column(name="reg_no",updatable = false, nullable = false)
    private String regNo;

    @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL })
    @JoinColumn(name = "reg_no")
    private List<AttendanceModel> attendances;
}

и исключение я получаю.

    update
        student_detail 
    set
        address=?,
        alt_contact_number=?,
        blood_group=?,
        contact_number=?,
        dob=?,
        father_name=?,
        first_name=?,
        gender=?,
        last_name=?,
        middle_name=?,
        mother_name=?,
        photo_url=?,
        school_id=? 
    where
        reg_no=?
Hibernate: 
    update
        attendance 
    set
        reg_no=null 
    where
        reg_no=?
2019-01-13 12:12:52.922  WARN 10708 --- [nio-8081-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 23502
2019-01-13 12:12:52.923 ERROR 10708 --- [nio-8081-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : ERROR: null value in column "reg_no" violates not-null constraint
  Detail: Failing row contains (null, 1, 2019-01-05, t, 2).
2019-01-13 12:12:52.926  INFO 10708 --- [nio-8081-exec-1] o.h.e.j.b.internal.AbstractBatchImpl     : HHH000010: On release of batch it still contained JDBC statements
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [reg_no]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement

моя модель обслуживания выглядит следующим образом

@Entity
@Table(name="attendance")
@Getter @Setter
public class AttendanceModel {

    //@EmbeddedId
    //private AttendanceId attendanceId;

    @Id
    @Column(name="attendance_id")
    private long id;


    @Column(name="reg_no")
    private String regNo;

    @Column(name="subject_id")
    private long subjectId;

    @Column(name="class_date")
    private Date classDate;


    @Column(name="present")
    private boolean present;
}

1 Ответ

0 голосов
/ 13 января 2019

Не могли бы вы показать мне модель студента. Если я посмотрю ваш код: вы используете однонаправленные отношения.

Я думаю, что это должно:

@OneToMany(fetch = FetchType.LAZY , cascade = CascedeType.ALL)
@JoinColumn(name="attendance_id")
private List<AttendanceModel> attendances = new ArrayList<>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...