我有这段代码:
@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执行此操作?
答案 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值。