我想通过xml映射在文本字段上添加索引。与https://stackoverflow.com/a/860955/3256688中建议的一样,我尝试使用辅助数据库对象,因为映射本身不支持索引长度。但对我来说,看起来Hibernate完全忽略了映射的这一部分。
这是我的代码。想要在表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>
在hibernate(调试级别)的日志记录中,我看到每个表和索引都是正确创建的,但我找不到url_idx
。当然,数据库中没有创建索引。
有什么线索我在这里失踪了吗?
编辑非常有趣:如果我使用工具org.hibernate.tool.hbm2ddl.SchemaExport
进行架构导出,它可以正常工作。但如果我在代码中初始化Hibernate,仍然是一样的。
顺便说一下。我使用的是Hibernate 4.3.6
答案 0 :(得分:1)
我找到了解决方案:hibernate.hbm2ddl.auto
必须是create
或create-drop
,否则代码将不会被执行。我认为这是一个错误......
答案 1 :(得分:0)
问题在于,您使用
创建 <create>CREATE INDEX url_idx ON MY_TABLE (`url`(30))</create>
然后用
删除它<drop>DROP INDEX ON MY_TABLE `url_idx`</drop>