使用JPA保存到h2 db时为什么我的外键为null

时间:2018-01-12 01:33:27

标签: jpa jpa-2.0

这两个代码之间有什么区别。第一个在我的外键上显示null,即个别Id。第二个不是。为什么呢?

//第一个代码:

@Entity
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
public class Individual {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "INDIVIDUAL_ID")
    private Long individualId;

    @OneToMany(mappedBy="individual",cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<Identification> identifications = new ArrayList<Identification>();
}

@Entity
public class Identification {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "IDT_ID")
    private Long id;

    @ManyToOne
    @JoinColumn(name="individualId")
    private Individual individual;

//第二个代码

//在第一个代码&amp;中替换了@OneToMany那么我只是不在识别类中添加@ManyToOne,它工作正常。为什么呢?

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "INDIVIDUAL_ID", referencedColumnName = "INDIVIDUAL_ID")
private List<Identification> identifications = new ArrayList<Identification>();

当我在谷歌搜索JPA教程时,第一个代码是我一直读到的代码。在父类中声明@OneToMany并添加mappedBy,在子类中声明@ManyToOne。但为什么第二个代码比第一个代码完美?它只是让我在父类中声明@OneToMany?

1 个答案:

答案 0 :(得分:0)

在班级Identification中,@JoinColumn的名称与班级Individual中的任何列都不匹配。它必须是数据库中列的名称,即INDIVIDUAL_ID:

@JoinColumn(name="INDIVIDUAL_ID")