设置TEXT的索引长度

时间:2014-12-05 16:16:40

标签: mysql hibernate

我想通过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

2 个答案:

答案 0 :(得分:1)

我找到了解决方案:hibernate.hbm2ddl.auto必须是createcreate-drop,否则代码将不会被执行。我认为这是一个错误......

答案 1 :(得分:0)

问题在于,您使用

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

然后用

删除它
<drop>DROP INDEX ON MY_TABLE `url_idx`</drop>