0

我有这样定义的表:

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

4

1 回答 1

0

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

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

于 2012-12-03T15:14:25.693 回答