Java 如何将外键设置为空?

Java 如何将外键设置为空?,java,jpa,foreign-keys,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(n

我有一个定义如下的表:

@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。

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


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

如果违反了约束,它不是来自JPA和Glassfish,而是来自您的数据库。即使关联是可选的,并且联接列标记为nullable,如果数据库中有NOTNULL约束,数据库也会应用它,并且您会得到一个异常。更改您的数据库模式。如果您能告诉我如何操作,我将非常高兴。