我有一个表有另一个表的外键(多对一关系),但我希望它可以为空。
这样的事情:
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?
答案 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是一个解决方案!