EclipseLink在JoinColumns中使用的列的默认值

时间:2012-06-18 10:25:28

标签: java jpa eclipselink

我有这段代码:

@Entity
@Table(name = "MOVERS")
public class MOVers implements Serializable {
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
    @JoinColumn(name = "X1077_69_EDECESSOR", referencedColumnName = "CLASSID"),
    @JoinColumn(name = "X1077_70_EDECESSOR", referencedColumnName = "ID")})
    private MOVers predecessor;
}

数据库不应具有空值。如果创建的版本是第一个,那么它不应该有前任,并且列(X1077_69_EDECESSOR,X1077_70_EDECESSOR)应该等于0.由于这个原因,我考虑创建Dummy对象,但是这是不可能的,因为其他一些列必须是唯一的。

如何使用EclipseLink执行此操作?

2 个答案:

答案 0 :(得分:1)

我假设您没有在数据库中设置外键,因为插入0会使这样的约束失败。奇怪的是你有一个非空约束,但没有外键约束。最好修复您的数据库,因为它设计不当。

如果您无法设置具有0个id的空根,那么您可以使连接列可插入/可更新= false并定义要写入列的基本字段,然后您可以控制它们的值模型。您需要在设置前一个时设置基本字段,如果没有前任,则默认为0。

答案 1 :(得分:0)

数据库没有任何外键,并且此DB在具有不了解NULL字段的持久性API的其他应用程序中使用。当我将UPDATE语句(如此语句)添加到新对象的创建阶段时,我解决了这个问题:

SET X1077_69_EDECESSOR = 0, X1077_70_EDECESSOR = 0, WHERE ID = :moversid

在这种情况下,新对象使用NULL字段创建,然后它们将更新为0值。