如何设置外键可空?

时间:2012-12-01 19:47:08

标签: java jpa foreign-keys

我有一个像这样定义的表:

@Entity
public class Shipment implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @ManyToOne(optional=true)
    @JoinColumn(name="SENDER_ID",referencedColumnName="CUSTOMER_ID", nullable=true)
    private Customer sender;

    @ManyToOne(optional=true)
  //  @Column(nullable=true)
    @JoinColumn(name="TARRIF_ID",referencedColumnName="TARRIF_ID",nullable=true)
    private Tarrif tarrif;




    @ManyToOne(optional=true)
  //  @Column(nullable=true)
    @JoinColumn(name="RECIPIENT_ID",referencedColumnName="CUSTOMER_ID",nullable=true)
    private Customer recipient;


    @ManyToOne(optional=true)
   // @Column(nullable=true)
    @JoinColumn(name="COURIER_ID",referencedColumnName="COURIER_ID",nullable=true)
    private Courier courier;
....
}

我想删除与货件相关联的客户/快递/关税对象。所以基本上,我希望能够将外键设置为NULL。

虽然nullable设置为true,但glassfish表示无法完成,因此违反了外键约束。有什么想法吗?

我正在使用javaee 6,javax.persistence.api 1.0.2,glassfish 3+和java derby db。

1 个答案:

答案 0 :(得分:0)

在调用remove之前,需要在“Java”/ JPA中将对象的任何引用设置为null。这将导致外键值设置为null。

您可以配置外键约束来在您自己的DDL中执行此操作,但您的对象模型(可能还有缓存)仍然会损坏(更好地修复您的代码)。