3

休止状態を使用するためのテーブルをマップするクラスがあります。マッピングを定数として使用するために無視したい変数がいくつかあります。そして、プロパティから定数値をロードしたいので、次のようにコーディングします。

@Transient
@Value("${something.value}")
private int MY_VALUE;

しかし、 の値MY_VALUEは常に 0 に設定されます。 @Transient アノテーションを @Value アノテーションと一緒に使用することはできませんか? それとも私は何か他のものを逃しましたか?

4

3 に答える 3

6

これら 2 つの注釈は、異なるドメインに属しています。

@Transientエンティティに@Value属し、Spring Beans に属します。エンティティは JPA / Hibernate によって管理され、Spring Beans は Spring によって管理されます。2 つを混在させるのは得策ではありません。

アノテーションと AspectJ コンパイルまたは Load Time Weavingを使用することでこれを実現できますが、そのようなハックは行わないことを強くお勧めします。エンティティではなく、Spring Bean を使用して保持してください。@Configurable@Value

于 2011-07-26T01:37:09.380 に答える
4

@ValueSpring が Bean を作成するときにロードするプロパティ値を指定するために使用します。

ただし、Hibernate を使用してデータベースからデータをロードしている場合、Spring はこれらのクラスをインスタンス化していません。したがって、@Value注釈は効果がありません。

@ValueHibernate からこれらのエンティティをロードする DAO に を挿入することをお勧めします。

public class FooDao {
    @Value("...")
    private int yourConfiguredValue;

    public getFoo() {
        Foo foo = sessionFactory.getCurrentSession().get(...);
        foo.setYourValue(yourConfiguredValue);
        return foo;
    }
}
于 2011-07-26T01:39:20.473 に答える