java - 使用JPA指定索引(非唯一键)
如何定义字段,例如email具有使用JPA注释的索引。 我们在email上需要一个非唯一键,因为每天在这个字段上有数百万个查询,而且没有密钥它有点慢。
@Entity
@Table(name="person",
uniqueConstraints=@UniqueConstraint(columnNames={"code", "uid"}))
public class Person {
// Unique on code and uid
public String code;
public String uid;
public String username;
public String name;
public String email;
}
我已经看到了一个特定于hibernate的注释,但我正在尝试避免供应商特定的解决方案,因为我们仍然在决定hibernate和datanucleus之间。
更新:
从JPA 2.1开始,您可以这样做。 请参阅:此位置不允许使用注释@Index
11个解决方案
154 votes
使用JPA 2.1,您应该能够做到这一点。
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Index;
import javax.persistence.Table;
@Entity
@Table(name = "region",
indexes = {@Index(name = "my_index_name", columnList="iso_code", unique = true),
@Index(name = "my_index_name2", columnList="name", unique = false)})
public class Region{
@Column(name = "iso_code", nullable = false)
private String isoCode;
@Column(name = "name", nullable = false)
private String name;
}
更新:如果您需要使用两个或更多列创建和索引,则可以使用逗号。 例如:
@Entity
@Table(name = "company__activ