Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 由于@OneToMany,JPA更新记录失败_Java_Spring_Postgresql_Spring Boot_Jpa - Fatal编程技术网

Java 由于@OneToMany,JPA更新记录失败

Java 由于@OneToMany,JPA更新记录失败,java,spring,postgresql,spring-boot,jpa,Java,Spring,Postgresql,Spring Boot,Jpa,我对@OneToMany映射有一点怀疑 我有一个模范学生和另一个模范学生 一个学生可以有多次出勤。但是学生模型应该只能检索出勤信息 但当我试图更改一些学生信息时,我发现下面的错误,因为它试图更新出勤记录 这是我的地图 @Entity @Table(name="student_detail") @Getter @Setter public class StudentDetailsModel { @Id @Column(name="reg_no",updatable = false

我对@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;
}
我的出席模式如下

@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;
}

你们能给我看看学生模型吗?若我看你们的代码帖子:你们使用单向关系

我认为它必须:

@OneToMany(fetch = FetchType.LAZY , cascade = CascedeType.ALL)
@JoinColumn(name="attendance_id")
private List<AttendanceModel> attendances = new ArrayList<>();
@OneToMany(fetch=FetchType.LAZY,cascade=CascedeType.ALL)
@JoinColumn(name=“考勤号”)
私人列表出席人数=新建ArrayList();

它应该尝试更新考勤记录。您已将cascade属性设置为ALL。是否可以发布AttendanceModel?您是否尝试添加JointColumn(nullable=true,…),但它默认设置为null。@NimaAJ我正确的级联类型应该是什么?我已经尝试使用CascadeType。移除相同的问题是there@JonathanJohx,我已经更新了这个问题,从代码“@JoinColumn(name=“reg_no”)”中删除这一行,这将解决您的问题。或者按照@squalltrt answer belowI编辑问题并添加学生模型。我认为这也是试图将注册号设置为空。如果在某些情况下reg_no=考勤id,则此操作将失败。在这种特殊情况下,两者将不相同。因为您使用相同的字段名JoinColumn和主键reg_no。您将主键Updateable设置为false,nullable设置为false。当您使用update时,hibernate查找reg_no并抛出异常,因为您在主键中将其设置为null。如果要更新,请在StudentDetailsModel中更改名称为join JoinColumn或remove Updateable=false、nullable=false。
@OneToMany(fetch = FetchType.LAZY , cascade = CascedeType.ALL)
@JoinColumn(name="attendance_id")
private List<AttendanceModel> attendances = new ArrayList<>();