【问题标题】:Java hbm.xml multiple index of one columnJava hbm.xml 一列的多个索引
【发布时间】:2016-01-13 16:00:48
【问题描述】:

例如,

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.sql.index">
    <class name="User">
        <id name="id" type="long">
            <generator class="native" />
        </id>
        <property name="firstName" type="string" index="IDX_FIRST_NAME" />
        <property name="lastName" type="string" />
        <property name="address" type="string" />
        <property name="field_1" type="long" />
        <property name="field_2" type="long" />
    </class>
</hibernate-mapping>

如果我想要 field_1field_2 有 2 个索引描述。我可以做以下事情吗?或者如何实现?

        <property name="field_1" type="long" index="idx_1,idx_2"/>
        <property name="field_2" type="long" index="idx_1,idx_3"/>

field_1field_2 将有 2 个自己的索引。


我指的是hibernate 3.6, 5.1.4.2 Property mapping with hbm.xml,看来index字段可以由only one column分配。


PS,

这个项目有点老了,很多人都在维护,所以我不能使用注解语法来添加index

【问题讨论】:

  • 你第一个用逗号的方法是正确的
  • 试了之后,果然有效。谢谢。

标签: java hibernate hbmxml


【解决方案1】:

我找到了post 并试一试。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.sql.index">
    <class name="User">
        <id name="id" type="long">
            <generator class="native" />
        </id>
        <property name="firstName" type="string" index="IDX_FIRST_NAME" />
        <property name="lastName" type="string" />
        <property name="address" type="string" />
        <property name="field_1" type="long" index="idx_2"/>
        <property name="field_2" type="long" index="idx_3"/>
    </class>
    <database-object>
        <create>
            CREATE INDEX idx_1 ON User (field_1, field_2)
        </create>
        <drop></drop>
    </database-object>
</hibernate-mapping>

这个问题可以通过&lt;database-object&gt;来解决,通过写原生sql语法来创建索引。


更新,2018/11

对于具有多个属性的唯一约束,someone has answered it

使用properties标签

<properties name="uk1" unique="true">
        <property name="username" .../>
        <many-to-one name="client" .../>
</properties>

<properties name="uk2" unique="true">
        <property name="email" .../>
        <many-to-one name="client" update="false" insert="false" .../>
</properties>

【讨论】:

    猜你喜欢
    • 2021-10-30
    • 2017-10-04
    • 2011-07-11
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    相关资源
    最近更新 更多