We have the following entity relationships where a User belongs to a particular Organization. My queries either look like \"select * from User where org=:org\" or \"select *
Yes, it is possible using JPA 2.1 as seen in the specification here:
http://download.oracle.com/otndocs/jcp/persistence-2_1-pfd-spec/index.html
on page 445 it states that
The Index annotation is used in schema generation
columnList (Required) The names of the columns to be included in the index.
An example of usage can be seen here:
http://java-persistence-performance.blogspot.co.uk/2013/03/but-what-if-im-not-querying-by-id.html
It seems that the syntax is the same or very similar to Hibernate.
This is doable using the Hibernate specific @Table
annotation. From the documentation:
2.4.1 Entity
...
@Table(appliesTo="tableName", indexes = { @Index( name="index1", columnNames={"column1", "column2"} ) } )
creates the defined indexes on the columns of tabletableName
. This can be applied on the primary table or any secondary table. The@Tables
annotation allows your to apply indexes on different tables. This annotation is expected where@javax.persistence.Table
or@javax.persistence.SecondaryTable(s)
occurs.
As you can read in JSR-000338 Java Persistence 2.1 Proposed Final Draft Specification:
11.1.23 Index Annotation
The
Index
annotation is used in schema generation. Note that it is not necessary to specify an index for a primary key, as the primary key index will be created automatically, however, the Index annotation may be used to specify the ordering of the columns in the index for the primary key.@Target({}) @Retention(RUNTIME) public @interface Index { String name() default ""; String columnList(); boolean unique() default false; }
The syntax of the
columnList
element is acolumn_list
, as follows:column::= index_column [,index_column]* index_column::= column_name [ASC | DESC]
The persistence provider must observe the specified ordering of the columns.
If
ASC
orDESC
is not specified,ASC
(ascending order) is assumed.
Usage example:
@Table(indexes = {
@Index(columnList = "org,type"),
@Index(columnList = "another_column")})