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约束,数据库也会应用它,并且您会得到一个异常。更改您的数据库模式。如果您能告诉我如何操作,我将非常高兴。