2017-06-06 21 views
0

に応じて、エンティティのフィールドを休止します。このようなもの:春には、私はこのような何かを持っているプロファイル

@Profile("dev") 
    @Column(name = "begin_time_dev", columnDefinition = "TIMESTAMP WITH TIME ZONE", 
    nullable = false) 
    @Profile("test") 
    @Column(name = "begin_time_test", columnDefinition = "TIMESTAMP WITH TIME ZONE", 
    nullable = false) 
    private OffsetDateTime beginTime; 

これは可能なものですか?

答えて

0

私はおそらくあなたができると思う:

1)2つの異なるフィールドと異なるセッターを作成します。

2)すべてのJPAアノテーションをフィールドではなくメソッドレベルで追加します。

3)春4.1以降、メソッドをプロファイリングできるので、セッターでプロファイルを使用します。

@Profile注釈は、以下のいずれかの方法で使用することができる:@Configurationクラスを含む、直接的または間接的に@Componentで注釈任意のクラスのタイプレベルのアノテーションとして。メタ・アノテーションとして、カスタム・ステレオタイプの注釈を作成するためのものです。プロファイルはその範囲外にあるので、任意の@Bean法上のメソッドレベルの注釈

PROFILE DOCS

0

として実際にJPA/Hibernateは春について何も知りません。さらに、エンティティは豆ではないので、春には使用しません。

唯一の解決策は、プレースホルダ{profile_begin_time_test}を定義し、インターセプタを追加することです(the example参照)。

方法において

public String onPrepareStatement(String sql) 

休止状態によって生成されるSQLにおいて、所望の実際の列名と{profile_begin_time_test}プレースホルダを置き換えます。プレースホルダ置換は、スプリングプロファイルに基づいて値を使用するように構成できます。

0

custom Hibernate UserTypeを作成し、これをHibernate @Typeアノテーションを使用してbeginTimeフィールドに登録すると、これを行うことができます。

新しいUserTypeでは、Environmentから現在のプロファイルを取得して、ターゲットの列名を判別できます。 UserTypeはHibernateによってインスタンス化されており、Springアプリケーションのコンテキストについてはわかりませんので、まずアプリケーションにEnvironmentを静的に登録する必要があります。すべてのdoable!

関連する問題