java - 如何在 hibernate 实体中按多列定义索引?

标签 java hibernate orm jboss

早上好。

我需要在 hibernate 实体中添加索引。据我所知,可以使用 @Index 批注为单独的列指定索引,但我需要为多个实体字段创建索引。

我用谷歌搜索并找到了 jboss 注释 @Table,它允许这样做(根据规范)。但是(我不知道为什么)这个功能不起作用。可能是 jboss 版本低于必要的版本,或者我不明白如何使用这个注释,但是......没有创建复杂的索引。

为什么不能创建索引?

jboss 版本 4.2.3.GA

实体示例:

package somepackage;
import org.hibernate.annotations.Index;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
@org.hibernate.annotations.Table(appliesTo = House.TABLE_NAME,
    indexes = {
            @Index(name = "IDX_XDN_DFN",
                    columnNames = {House.XDN, House.DFN}
            )
    }
)

public class House {
    public final static String TABLE_NAME = "house";
    public final static String XDN = "xdn";
    public final static String DFN = "dfn";

    @Id
    @GeneratedValue
    private long Id;

    @Column(name = XDN)
    private long xdn;

    @Column(name = DFN)
    private long dfn;

    @Column
    private String address;

    public long getId() {
        return Id;
    }

    public void setId(long id) {
        this.Id = id;
    }

    public long getXdn() {
        return xdn;
    }

    public void setXdn(long xdn) {
        this.xdn = xdn;
    }

    public long getDfn() {
        return dfn;
    }

    public void setDfn(long dfn) {
        this.dfn = dfn;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

当 jboss/hibernate 尝试创建表“house”时,它抛出以下异常:

Reason: org.hibernate.AnnotationException: @org.hibernate.annotations.Table references an unknown table: house

最佳答案

请尝试以下操作:

@Entity
@org.hibernate.annotations.Table(appliesTo = House.TABLE_NAME,
    indexes = {
            @Index(name = "IDX_XDN_DFN",
                    columnNames = {House.XDN, House.DFN}
            )
    }
)
@Table(name="house")
public class House {
    ...
}

请注意,这还应该允许您创建多列索引(基于索引名称):

@Index(name = "index1")
public String getFoo();

@Index(name = "index1")
public String getBar();

P.S.:顺便说一句,您使用的是哪个版本的 Hibernate?什么数据库/方言?

关于java - 如何在 hibernate 实体中按多列定义索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2182950/

相关文章:

java - Felix 如何使用 FrameworkWiring.getDependencyClosure

java - Spring Boot 为 POST 到未知 URL 返回 405 而不是 404

java - 在泛型方法java中传递类类型

java - 尝试使用 Spring/JPA/Hikari 在我的代码中查找数据库连接泄漏

java - Hibernate 多个原生 SQL 语句

python - 如何从sqlalchemy中的方言特定类型获取通用数据类型?

java - 在不同负载的机器上运行性能测试

java - Hibernate:更新一个对象 -> 也执行不需要的删除语句

php - 在 Symfony2 中使用 Doctrine 映射异常错误

java - Hibernate 条件 - org.hibernate.QueryException : could not resolve property: