2013-10-31 38 views
2

我有以下情況。JPA/HIBERNATE:值必須是常數

public enum TestEnum{ 

    PUUNITONE("puunitone"), 
    PUUNITTWO("puunittwo"); 

    private String name; 

    private TestEnum(String name) { 
     this.name = name; 
    } 


    public String getName() { 
     return name; 
    } 

} 
EJB @stateless

@PersistenceContext(unitName = TestEnum.PUUNITONE.getName()) 
private EntityManager entityManager; 

我有以下

Compilation Error: Value must be a constant 

現在我的問題:

1.在java中的枚舉常量或不?如果是,這裏有什麼問題?
2.是否有一種方法或workarround通過使用Enum作爲常量來解決此問題?

非常感謝任何建議

+1

你沒有使用「getName()」來試試嗎? Oracle文檔說:「...使變量成爲一組預定義的常量」。請參閱:http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html。 – mwhs

+2

可能是這樣的一個副本:http://stackoverflow.com/questions/3271659/use-enum-type-as-a-value-parameter-for-rolesallowed-annotation – mwhs

+0

@mwhs感謝您的評論。不幸的是它不起作用。同樣的錯誤產生 –

回答

5
  1. 是,枚舉是常數,但是getName()不是一個常量:編譯器不能告訴大家,它總是返回相同的結果。
  2. 不,您必須在註釋中使用litteral Stringfinal static String。只有那些是編譯器的常量。