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;
}

データベースに null 値を含めないでください。作成されたバージョンが最初の場合は、先行バージョンを持たない必要があり、列 (X1077_69_EDECESSOR、X1077_70_EDECESSOR) は 0 に等しい必要があります。この理由でダミー オブジェクトの作成を考えましたが、他のいくつかの列が一意でなければならないため、それは不可能です。

EclipseLinkを使用してどうすればよいですか?

4

2 に答える 2

1

insert 0 はそのような制約に失敗するため、データベースに外部キーが設定されていないと仮定します。null 制約ではなく、外部キー制約がないのは奇妙です。データベースが不適切に設計されているため、データベースを修正することをお勧めします。

ID が 0 の null ルートを設定できない場合は、結合列を insertable/updateable=false にして、列に書き込む基本フィールドを定義すると、モデル内の値を制御できます。先行が設定されている場合は基本フィールドを設定する必要があり、先行が設定されていない場合はデフォルトで 0 に設定する必要があります。

于 2012-06-18T13:16:48.597 に答える
0

データベースには外部キーがなく、この DB は、NULL フィールドを認識しない永続 API を使用して他のアプリケーションで使用されます。このような UPDATE ステートメントを新しいオブジェクトの作成段階に追加したときに、この問題を解決しました。

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

この場合、新しいオブジェクトは NULL フィールドで作成され、その後値 0 に更新されます。

于 2012-06-20T04:19:56.027 に答える