解决:Spring data JPA无法将@OneToMany和@ManyToOne的双向关联的实体保存在数据库中

问题描述:

Spring data JPA无法将@OneToMany和@ManyToOne的双向关联的实体保存在数据库中。“无法保存在数据库中”具体讲,就是虽然其他字段存进去了,但是逻辑外键却是null。如下图:

在这里插入图片描述

Spring新手,踩了很多坑,本来以为是注解没用对,以为是Lazy Fetch的问题,后来发现是需要将要关联的实体持久化到数据库中,在注解使用之前的实体都无法关联。于是在研究为什么无法持久化。

我的One类:

@Entity
@Table(name = "Enterprise")
@Data
@NoArgsConstructor
public class Enterprise {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long enterpriseId;

    @Column(length = 128, nullable = false)
    private String enterpriseName;


    @ToString.Exclude
    @OneToMany(mappedBy = "enterprise", fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
    private List<EnterpriseUser> enterpriseUserList;

}

我的Many类:

public class EnterpriseUser extends User {

    private Long enterpriseId;

    @Column(length = 32)
    private String root;

    @ManyToOne(cascade = CascadeType.PERSIST)
    private Enterprise enterprise;

    public static class Root {
        public static final String SUPER = "super";
        public static final String ORDINARY = "ordinary";
    }
}

解决:

需要两个实体互相设置好引用,然后保存!

enterprise.setEnterpriseUserList(Arrays.asList(enterpriseUser));
enterpriseUser.setEnterprise(enterprise);

PS:级联保存(cascade = CascadeType.PERSIST)是个好东西

你可能感兴趣的:(数据库,java,spring)