2017-12-07 4 views
0

私はPOJOを取得していますが、現在は単一の列から値を取得しています。しかし、私はHibernate @Formula(別のテーブルから最新のレコードを選択します)を使用して検索します。私は何も壊さないために柔らかく行きたい。Hibernateで@Columnと@Formulaを同時に使用する

それでは、私がやりたいことは、このようなものです:私はPREVIOUS_FIELD_COLUMNsomeField値を格納することができると同時に、新たな基準に基づいて値を取得することができるように

class SomeDto { 
    private someField; 

    @Column("PREVIOUS_FIELD_COLUMN", nullable = false, length = 1) 
    @Formula("@NEW RETRIEVING [email protected]") 
    public getSomeField() { 
    ... 
} 

しかし今では、私は次のエラーを取得するようHibernateは@Column注釈を無視しているようです:

SQLIntegrityConstraintViolationException: ORA-01400: cannot insert NULL into

私は(それをリストアップし、doesnのいないHibernateが生成されているINSERT文でPREVIOUS_FIELD_COLUMNをスキップログで見ますPOJOの値を設定しないでください)。

ご協力いただきありがとうございます。

答えて

1

以前の値を新しいフィールドに再マップするだけで、古いレコードのために永続化され続け、古い値を@Formulaロジックに再マッピングすることができます。

public class SomeEntity { 
    @Formula("your new formula logic"); 
    public Object getSomeField() {} 

    @Column(name= "PREVIOUS_VALUE") 
    public Object getPreviousValue() {} 
} 

あなたの投稿は、あなたが技術的にはあなたのアプリケーションがまだ同じようにオブジェクトと対話することができていると懸念しているすべてのように聞こえるが、あなたはどこか別の場所から値を調達したいです。ただし、古い値へのアクセスと保存を維持できます。

上記の解決策はまさにそれを可能にします。

+0

を参照してください詳細については、この

class SomeDto { private someField; @Column("PREVIOUS_FIELD_COLUMN", nullable = false, length = 1) @ColumnTransformer(read = “@NEW RETRIEVING [email protected]”) public getSomeField() { ... } 

のように代わりに式のColumnTransformerを使用すると思います少しきれいな方法:) –

関連する問題