我有一个多对一的关系,我希望它是可空的:
@ManyToOne(optional = true)
@JoinColumn(name = "customer_id", nullable = true)
private Customer customer;
很遗憾,JPA会一直将我的数据库列设置为NOT NULL。有人能解释一下吗?有没有办法让它工作?请注意,我使用JBoss 7、JPA 2.0与Hibernate作为持久性提供程序以及PostgreSQL 9.1数据库。
编辑:
我找到了问题的原因。显然,这是由于我在引用实体"Customer"中定义主键的方式导致的。
@Entity
@Table
public class Customer {
@Id
@GeneratedValue
@Column(columnDefinition="serial")
private int id;
}
在使用@Column(columnDefinition="serial")
作为主键时,似乎会自动将引用它的外键设置为NOT NULL
。在指定列类型为serial
时,这是否真的是预期的行为?在这种情况下,有没有解决可空外键的方法?
提前感谢您。
nullable = false
表示某个属性或字段不允许为空。为什么是false
而不是true
呢?这是因为通常情况下,我们希望确保数据的完整性和一致性,因此该属性应设置为“不可空”,即false
。 - Andremoniynullable = true
。 - elquimista