【发布时间】:2010-02-02 09:26:49
【问题描述】:
早上。
我需要在休眠实体中添加索引。据我所知,可以使用@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
【问题讨论】:
-
顺便说一句,如果答案适合您,您应该将答案标记为已接受(选票下方的勾号)。
-
@foobar - 你的问题解决了吗?
-
我决定使用 SQL 脚本手动创建索引。您的建议是正确的,但我认为这就像用户用作休眠方法的黑客。并且此方法不能适用于其他持久性提供程序。问题已解决,但将来我想花更多时间来了解如何以最佳方式完成此任务。我会在这里写下结果...非常感谢。
-
查看@Pascal Thivent 的答案:它表明您的映射中缺少注释。 (来自参考文档:此注释 [@org.hibernate.annotations.Table] 应出现在 @javax.persistence.Table 出现的位置。)