jpa-2.0 – 不能使@ManyToOne关系为空
我有一对一的关系,我想要空:
@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.当将列类型指定为串行时,这是否真的是预期的行为?在这种情况下是否有使可空的外键的解决方法? 先谢谢你. 解决方法
我找到了解决我的问题.主键在实体Customer中定义的方式很好,问题在于外键声明.应该这样宣布:
@ManyToOne @JoinColumn(columnDefinition="integer",name="customer_id") private Customer customer; 实际上,如果省略属性columnDefinition =“integer”,则外键将默认设置为源列:具有其自己的序列的非空序列.这当然不是我们想要的,因为我们只是想要引用自动递增的ID,而不是创建一个新的ID. 此外,在执行一些测试时,我看来还需要属性name = customer_id.否则外键列仍将设置为源列.这在我看来是一个奇怪的行为.欢迎评论或补充资料澄清此事! 最后,该解决方案的优点是ID由数据库生成(而不是由JPA生成),因此在手动或经常在数据迁移或维护中发生的脚本插入数据时,我们无需担心. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |