2015-11-17 41 views
2

在我的Hibernate項目列,我添加了像這樣指數:JPA 2.1指數的註釋與函數

@Entity 
@Table(name="MY_TABLE", indexes = { 
    @Index(name = "idx_user_name", columnList = "name"), 
    @Index(name = "idx_user_email", columnList = "email") 
}) 

這工作得很好,但是當我要做出這樣的指標會發生什麼:

CREATE INDEX ON my_table (lower(name)); 

如果我用下面的註解,我得到一個AnnotationException

@Index(name = "idx_lower_name", columnList = "lower(name)") 

我要出貨我的項目通過Hibernate + JPA 2.1進行索引。是否可以通過索引註釋來應用函數?

或者我應該在部署上運行一個SQL腳本來通過SQL自己添加這些索引?

我只能格式化columnList錯誤,或者可能有一個字段沒有在我缺少的文檔中描述。

+0

生成的Javadoc將_always_顯示註釋的_all_字段 - 即使是那些沒有顯式JavaDoc註釋的字段。你試過'@Index(name =「idx_lower_name」,columnList =「lower(name)」)'? –

+0

@ tobias-liefke'AnnotationException'是使用@Index(name =「idx_lower_name」,columnList =「lower(name)」)的結果' –

+0

謝謝,我已將這些信息整合到問題中。 –

回答

5

在JPA 2.1中不能使用基於函數的索引。

JPA提供了從特定數據庫中抽象的方法。每個數據庫都有自己的FBI實現,它可以是vary greatly。 因此,它不是標準的一部分。

我偷看到Hibernate代碼,看看是否可能有一個未公開的功能爲聯邦調查局。不幸的是,只有基於列的索引是supported

您應該在部署上運行SQL腳本以創建索引。

+0

顯示的功能謝謝,這就是我認爲和計劃做的,否則。 – rosenthal