0

我有这段代码:

@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 来做到这一点?

4

2 回答 2

1

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

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

于 2012-06-18T13:16:48.597 回答
0

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

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

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

于 2012-06-20T04:19:56.027 回答