@ManyToOne JPA关系可以为null吗?

时间:2014-09-08 06:02:46

标签: java hibernate jpa hibernate-mapping many-to-one

我有一个表有另一个表的外键(多对一关系),但我希望它可以为空。

这样的事情:

public class SubType() {

    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    private String id;

}

public class TopUp {

    @Column(nullable = true)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private SubType subType;

}

@Column(nullable = true)会抛出NullPointerException,并说子类型不能为空。 有没有办法让ManyToOne接受null?

3 个答案:

答案 0 :(得分:26)

您需要设置:

@ManyToOne(optional = true, fetch = FetchType.LAZY)

不是optional=false

@Column(nullable=true)是指示DDL生成工具包含NULL SQL列类型约束。

有关optional vs nullable的更多信息,请查看this StackOverflow answer

答案 1 :(得分:4)

试试这个:

@JoinColumn(name = "subType_id", nullable = true)

答案 2 :(得分:0)

只有这对我有帮助:

public class TopUp {
    @ManyToOne
    @JoinColumn(columnDefinition="integer", name="subtype_id")
    private SubType subType;
}

columnDefinition是一个解决方案!