JPA2.1でエンティティからインデックスを自動生成する

ということで、やっとこさJPA2.1を触れましたよ。
最初に触ったのはJPA2.1から入った新機能@Index
Entityからインデックスを自動生成できるという代物。

HibernateやらEclipseLinkでは実装されていたけれども、JPAでは仕様化されておらず、JPA単体では使用ができませんでした。

RDBを使用する上でインデックスは必要不可欠なものなのだけれども、JPAで仕様として定められていないため、可搬性を考えてEntityからテーブルを作成するようにしても、なぜかインデックスの作成だけはSQL叩かなければいけないという自体からは逃れられるように。

非常にありがたい。

@Entity
@Table(indexes = @Index(columnList = "message1,message2"))
public class NewEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String message1;
    private String message2;
〜〜〜

EclipseLinkではEntityに直接アノテーションを付ける形だったけれども、JPAで標準化されるにおいては、@tableの一部になったらしい。
Hibernate陣営が勝ったということかな。

しかし、カラムとして指定するのを文字列にしてしまうのはどうにかならないかなー。リファクタリングで死ぬ。

せっかくCriteriaから自動生成されるタイプセーフ用のAPIがあるのに活かしきれていないのはもったいないなぁ。
それを使用する場合Entityに直接書けないという制限は出てくるけど・・・・・