2012-05-23 3 views
0

나는 java 및 또한 morphia와 함께 mongodb를 사용하고 있습니다.morphia annotation

제 사용의 경우 런타임시 컬렉션 이름을 가져옵니다. 그래서 나는 컬렉션 이름의 enum을 가지고 어떤 값을 기반으로 열거 형에서 상응하는 컬렉션 이름을 얻는다.

@entity(EnumName.getCollectionName()) 

을 다음하지만 난 내가 실제로 단지 상수 식을 반환하고 다음과 같은 오류를

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

를 얻을로 내 엔티티 주석이다. 아무도 내게 문제가 무엇인지 알려주지 못했습니다.

+0

왜 컬렉션 이름이 런타임에 나타 납니까? 런타임에 구성 파일을 가져 오는 대신 구성 파일에 넣을 수 있습니까? – user2793390

답변

0

나중에 변경할 수없는 "컴파일"시간 기능 인 것처럼 주석 내에서 동적 인 것을 사용할 수 없습니다. 따라서 여러분은 선언 한 상수 인 Enums와 Classes 만 처리 할 수 ​​있습니다. 이를 위해 스마트 컴파일러는 변경할 수없는 것을 처리 할 수 ​​있지만, 주석 속성에 일부 함수 값을 할당하려고하면 오류가 발생한다는 것을 알 수 있습니다.

나는 당신이 무엇을 하려는지는 정말로 이해하지 못하지만, 어떻게 든 당신은 하나의 "일반적인"엔티티 클래스를 여러 구체적인 엔티티에 사용하려고 시도하는 것처럼 보입니다. 나는 이것이 정말로 나쁜 디자인이라고 생각한다. 자세한 내용을 알 수 있다면 문제에 대한 적절한 해결책을 제공 할 수 있습니다.

런타임시 작동해야하는 클래스를 모르면 간단히 시도하십시오. 구체적인 엔티티를 선언하고 열거 형을 해당 클래스로 채 웁니다. 런타임에 Datastore.find(Enum.YOURCLASS)을 할 수 있으며 morphia가 적절한 클래스를 쿼리합니다.