我有一个像这样定义的表:
@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。
答案 0 :(得分:0)
在调用remove之前,需要在“Java”/ JPA中将对象的任何引用设置为null。这将导致外键值设置为null。
您可以配置外键约束来在您自己的DDL中执行此操作,但您的对象模型(可能还有缓存)仍然会损坏(更好地修复您的代码)。