解决spring-data-jpa 级联添加时,主表放弃对外键维护时外键字段为null

探讨Spring Data JPA中级联添加多条数据时,主表放弃对外键维护导致从表外键字段为null的问题及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

在spring-data-jpa中使用级联添加,一次添加多条数据时,在主表上放弃对外键维护时,添加数据到数据库,从表的外键字段为null值,当不放弃主表对外键的维护时,又正常添加。
在这里插入图片描述

主表对应实体类(Team,一的一方)
@Entity
@Table(name = "team")
public class Team implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "t_id")
    private Integer tId;
    @Column(name = "t_name")
    private String tName;
    /*@OneToMany(targetEntity = Student.class,cascade = CascadeType.ALL)
    @JoinColumn(name = "link_t_id",referencedColumnName = "t_id")*/
    //主表放弃对外键的维护,mappedBy属性声明从表所对应的属性名
    @OneToMany(mappedBy = "team",cascade = CascadeType.ALL)
    private Set<Student> studentSet=new HashSet<Student>();
    ...
从表对应实体类(Student,多的一方)
@Entity
@Table(name = "student")
public class Student implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "s_id")
    private Integer sId;//学生id,主键
    @Column(name = "s_name")
    private String sName;//学生姓名
    @Column(name = "s_age")
    private Integer sAge;//学生年龄
    @Column(name = "s_sex")
    private String sSex;//学生性别
    @ManyToOne(targetEntity = Team.class)
    @JoinColumn(name = "link_t_id",referencedColumnName = "t_id")
    private Team team;//team对象
    ...
级联添加测试
@Test
    @Transactional
    @Rollback(value = false)
    public void testSave(){
        //创建一个团队
        Team team = new Team();
        team.settName("会员系统team");
        //创建学生1
        Student student = new Student();
        student.setsName("张三");
        student.setsAge(20);
        student.setsSex("男");
        student.setTeam(team);//多对一(必须要加)
        //创建学生2
        Student student1 = new Student();
        student1.setsName("小丽");
        student1.setsAge(20);
        student1.setsSex("女");
        student1.setTeam(team);//多对一(必须要加)
        //将这两个学生添加到会员系统里面
        Set<Student> studentSet = team.getStudentSet();//一对多
        studentSet.add(student);
        studentSet.add(student1);
        teamDao.save(team);
    }
解决:在主表放弃维护外键时,在测试的时候没有添加这个声明多对一的关系,相当于两张表没有关系了,所以添加的从表中的外键字段一直显示为null.

在这里插入图片描述
添加上之后就能够正常保存了。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值