1. ホーム
  2. java

[解決済み] JPAによるインデックス(非ユニークキー)の指定

2022-11-30 03:19:32

質問

どのようにフィールドを定義するのですか? 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のどちらかを決定しているので、ベンダー特有の解決策は避けようとしています。

UPDATEしました。

JPA 2.1では、このようなことができます。参照してください。 アノテーション @Index はこの位置では許可されません

どのように解決するのですか?

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;

} 

更新 : もし2つ以上のカラムを持つインデックスを作成する必要がある場合は、カンマを使用することができます。例えば

@Entity
@Table(name    = "company__activity", 
       indexes = {@Index(name = "i_company_activity", columnList = "activity_id,company_id")})
public class CompanyActivity{