аннотация морфии

Я использую mongodb с java, а также morphia.

В моем случае я получаю имя коллекции во время выполнения. Итак, у меня есть перечисление имен коллекций, и на основе некоторого значения я получаю соответствующее имя коллекции из перечисления. Моя аннотация сущности выглядит следующим образом

@entity(EnumName.getCollectionName())

Но я получаю следующую ошибку

"The value for annotation attribute Entity.value must be a constant expression"

На самом деле я возвращаю только постоянное выражение. Может ли кто-нибудь сообщить мне, в чем проблема.


person user1397252    schedule 23.05.2012    source источник
comment
Почему вы получаете имя коллекции во время выполнения? Это что-то, что вы могли бы поместить в файл конфигурации, а не получать его во время выполнения?   -  person user2793390    schedule 11.08.2017


Ответы (1)


Вы не можете использовать что-то динамическое в аннотациях, поскольку это функции времени «компиляции», которые нельзя изменить впоследствии. Таким образом, вы можете обрабатывать только те константы, которые вы там объявили, перечисления и классы. Для этого умный компилятор может обнаружить, что вы обрабатываете что-то, что может никогда не измениться, но большинство из них просто ошибается, как только увидит, что вы пытаетесь присвоить какое-либо значение функции свойству аннотации.

Я не совсем понимаю, что вы пытаетесь сделать, но почему-то похоже, что вы пытаетесь использовать один «общий» класс сущностей для нескольких конкретных сущностей. Я думаю, что это действительно плохой дизайн. Если вы можете сообщить более подробную информацию, мы можем дать вам правильное решение для вашей проблемы.

Если вы просто не знаете, с каким классом вам приходится работать во время выполнения, попробуйте это. Объявите свои конкретные объекты и заполните перечисление этими классами. Во время выполнения вы можете сделать Datastore.find(Enum.YOURCLASS) и morphia запросит ваш соответствующий класс.

person philnate    schedule 24.05.2012