如何正确使用Hibernate @Index注释?

时间:2011-07-09 07:35:46

标签: java hibernate grails indices

我有一个java类用作一个实体,它有2个继承自它的类。这个类有一些索引,但这些索引没有出现在数据库中。这是我的java超类代码

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.persistence.Version;
import javax.persistence.OneToMany;
import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="service", uniqueConstraints = {@UniqueConstraint(columnNames={"name"})})
@org.hibernate.annotations.Table(appliesTo = "service", 
                                 indexes = { @Index(name = "service_name", columnNames = { "name" }), 
                                 @Index(name = "service_description", columnNames = { "description" }),
                                 @Index(name = "service_accessNumber", columnNames = { "access_number" })   
                     })
public class Service implements Serializable {

@Column(name="access_number",length = 95,nullable=false)
    String accessNumber;

@Column(length=80,nullable=false)
    String name;

@Column(length=140)
    String description;

}

有谁知道我的问题是什么 注意:我的所有java类都有这个问题,但这是其中之一。所有类中的代码都与此

相同

编辑:我构建一个xml文件并将其放在一个grails项目中,当我运行这个项目时,创建了数据库

2 个答案:

答案 0 :(得分:2)

单个@Table注释是否有效?我没有尝试过,我想Hibernate @Table可能会被JPA @Table覆盖。

您也可以在列字段上尝试@Index注释:

public class Service implements Serializable {
    @Index(name="service_accessnumber")
    @Column(name="access_number",length = 95,nullable=false)
    String accessNumber;

    @Index(name="service_name")
    @Column(length=80,nullable=false)
    String name;

    @Index(name="service_description")
    @Column(length=140)
    String description;
}

答案 1 :(得分:1)

我有同样的问题,但我发现它是解决方案,它可以正常使用我试试,它可能会帮助你

in your DataSource.groovy file in your grails project make sure that under 
environment dbCreate is not equal to "update": if it is equal to "update", change 
it to "create".

这样可以正常使用