Не могу ли я использовать аннотацию @Value с аннотацией @Transient? - PullRequest
2 голосов
/ 26 июля 2011

У меня есть класс для сопоставления таблицы для использования в спящем режиме.Есть некоторая переменная, которую я хочу игнорировать для отображения в качестве константы.И я хочу загрузить постоянное значение из свойств, поэтому я кодирую его так:

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

Но значение MY_VALUE всегда равно 0. Не могу ли я использовать аннотацию @Transient с @Valueаннотаций?Или я что-то пропустил?

Ответы [ 2 ]

4 голосов
/ 26 июля 2011

Вы используете @Value, чтобы указать значение свойства для загрузки, когда Spring создает компонент.

Однако, если вы используете Hibernate для загрузки данных из базы данных, Spring не создает для вас экземпляры этих классов.Так что ваша аннотация @Value не имеет никакого эффекта.

Я бы предложил добавить @Value в DAO, который загружает эти объекты из Hibernate, что-то вроде

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

    public getFoo() {
        Foo foo = sessionFactory.getCurrentSession().get(...);
        foo.setYourValue(yourConfiguredValue);
        return foo;
    }
}
4 голосов
/ 26 июля 2011

Эти две аннотации принадлежат разным доменам.

@Transient принадлежит сущности, а @Value принадлежит Spring Beans.Объекты управляются JPA / Hibernate, Spring Beans управляется Spring.Не очень хорошая идея смешивать их.

Вы могли бы достичь этого с помощью , используя аннотацию @Configurable и компиляцию AspectJ или Weaving по времени загрузки, но яНастоятельно советую против такого взлома.Используйте Spring Bean для хранения @Value, а не сущности!

...