一个 @ManyToOne 的 JPA 关系能否为 null?

33

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

类似于这样:

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个回答

75
@ManyToOne关联默认是可选的,所以如果你希望它们可为空,就不需要设置任何内容。
然而,因为你设置了optional=false属性,你将其设为了必需的。
所以,不再是:
@ManyToOne(optional = false, fetch = FetchType.LAZY)

设置成这样:
@ManyToOne(fetch = FetchType.LAZY)

可选的默认为true

另一方面,@Column(nullable=true)是为了指示DDL生成工具包括一个NULL的SQL列类型约束。


这是一个非常棒的解决方案,所以得到了这么多赞同。 - undefined

5

试试这个:

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

0

只有这个对我有帮助:

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

columnDefinition 是一个解决方案!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接