2014-12-05 92 views
0

我想通過xml映射在文本字段上添加索引。就像在https://stackoverflow.com/a/860955/3256688中建議的那樣,我試圖使用輔助數據庫對象,因爲映射本身不支持索引長度。但對我來說,看起來Hibernate完全忽略了這部分映射。設置TEXT的索引長度

這是我的代碼。想要添加索引url_idx到表MY_TABLE

的hibernate.cfg.xml:

<hibernate-configuration> 
<session-factory> 
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> 
    <property name="hibernate.hbm2ddl.auto">update</property> 
    ... 
    <mapping resource="mytable.hbm.xml"/> 
    ... 

mytable.hbm.xml:

<hibernate-mapping> 
    <class name="com.company.MyTable" table="MY_TABLE"> 
     ... 
     <property name="url" column="url" type="text"/> 
     ... 
    </class> 
    <database-object> 
     <create>CREATE INDEX url_idx ON MY_TABLE (`url`(30))</create> 
     <drop>DROP INDEX ON MY_TABLE `url_idx`</drop> 
     <dialect-scope name="org.hibernate.dialect.MySQL5InnoDBDialect"></dialect-scope> 
    </database-object> 
</hibernate-mapping> 

在休眠(調試級別)的日誌我看到每個表和索引都正確創建,但我找不到任何關於url_idx。當然,在數據庫中沒有創建索引。

任何線索我在這裏失蹤?

編輯:非常有趣:如果我使用工具org.hibernate.tool.hbm2ddl.SchemaExport進行模式導出,它的工作方式應該是正常工作。但如果我在代碼中初始化Hibernate,仍然是一樣的。

Btw。我使用Hibernate 4.3.6

回答

1

刪除它,我找到了解決辦法:hibernate.hbm2ddl.auto必須是createcreate-drop否則它的代碼將不會被執行。我認爲這是一個錯誤...

0

問題就在這裏,你有

<create>CREATE INDEX url_idx ON MY_TABLE (`url`(30))</create> 

創建和你

<drop>DROP INDEX ON MY_TABLE `url_idx`</drop> 
+0

你是什麼意思?我不明白......這和我發佈它的方式完全一樣,或者? – ChornHulio 2014-12-07 21:51:01

+0

刪除刪除指令,您將在數據庫中看到您的索引 – Pracede 2014-12-08 05:02:31

+0

這也不起作用。 – ChornHulio 2014-12-08 07:48:34