Difference between revisions of "EclipseLink/UserGuide/JPA/Advanced JPA Development/Schema Generation/Index"
m |
|||
(33 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
+ | ---- | ||
+ | |||
+ | |||
+ | '''[[Image:Elug_draft_icon.png|Warning]] This page is now obsolete. ''' | ||
+ | |||
+ | For current information, please see "@Index" in the ''Java Persistence API (JPA) Extensions Reference for EclipseLink'': http://eclipse.org/eclipselink/documentation/latest/jpa/extensions/a_index.htm | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
{{EclipseLink_UserGuide | {{EclipseLink_UserGuide | ||
|info=y | |info=y | ||
|toc=n | |toc=n | ||
|eclipselink=y | |eclipselink=y | ||
− | |eclipselinktype=JPA | + | |eclipselinktype=JPA |
− | =@Index | + | |api=y |
+ | |apis= | ||
+ | * [http://www.eclipse.org/eclipselink/api/latest/org/eclipse/persistence/annotations/Index.html @Index] | ||
+ | |nativeapi=y | ||
+ | |nativeapis= | ||
+ | * [http://www.eclipse.org/eclipselink/api/latest/org/eclipse/persistence/tools/schemaframework/IndexDefinition.html IndexDefinition] | ||
+ | }} | ||
− | Use the @Index annotation in code or the <index> element in orm.xml to | + | =@Index= |
+ | |||
+ | An index is a database structure defined for a table, to improve query and look-up performance for a set of columns. | ||
+ | Use the [http://www.eclipse.org/eclipselink/api/latest/org/eclipse/persistence/annotations/Index.html <tt>@Index</tt>] annotation in code or the <tt><index></tt> element in the <tt>eclipselink-orm.xml</tt> descriptor to create an index on a table. | ||
+ | |||
+ | An index can be defined on an entity or on an attribute. For the entity it must define a set of columns to index. | ||
+ | |||
+ | Index creation is database specific. Some databases may not support indexes. Most databases auto-index primary key and foriegn key columns. Some databases support advanced index DDL options. To create more advanced index DDL, a DDL script or native query can be used. | ||
+ | |||
+ | {{EclipseLink_AttributeTable | ||
+ | |caption=@Index Attributes | ||
+ | |content= | ||
+ | <tr> | ||
+ | <td>'''<tt>catalog</tt>'''</td> | ||
+ | <td>The catalog of the INDEX.</td> | ||
+ | <td>Default catalog </td> | ||
+ | <td>No</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>'''<tt>columnNames</tt>'''</td> | ||
+ | <td>Specify the set of columns to define the index on. </td> | ||
+ | <td>For an Entity , the table. For an attribute, the table and column.</td> | ||
+ | <td>Not required when annotated on a field or method.</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>'''<tt>name</tt>'''</td> | ||
+ | <td>The name of the INDEX.</td> | ||
+ | <td><tt><table>_<column>_INDEX</tt> (but a name should be provided)</td> | ||
+ | <td>No</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>'''<tt>schema</tt>'''</td> | ||
+ | <td>The schema of the INDEX.</td> | ||
+ | <td>Default schema</td> | ||
+ | <td>No</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>'''<tt>table</tt>'''</td> | ||
+ | <td>The table to define the index on, defaults to entities primary table.</td> | ||
+ | <td>The entity's primary table.</td> | ||
+ | <td>No</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>'''<tt>unique</tt>'''</td> | ||
+ | <td>Specify whether the index is unique or non-unique.</td> | ||
+ | <td><tt>false</tt></td> | ||
+ | <td>No</td> | ||
+ | </tr> | ||
+ | }} | ||
+ | |||
+ | This example defines three indexes, one on first name, one on last name, and a multiple column index on first name and last name. | ||
+ | <source lang="java"> | ||
+ | @Entity | ||
+ | @Index(name="EMP_NAME_INDEX", columns={"F_NAME","L_NAME"}) | ||
+ | public class Employee{ | ||
+ | @Id | ||
+ | private long id; | ||
+ | @Index | ||
+ | @Column(name="F_NAME") | ||
+ | private String firstName; | ||
+ | @Index | ||
+ | @Column(name="L_NAME") | ||
+ | private String lastName; | ||
+ | ... | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | |||
+ | You can also create an index in the <tt>eclipselink-orm.xml</tt> descriptor using <tt><index></tt>, as shown in the following example. Define columns using the <tt><column></tt> subelement. All the attributes supported in the <tt>@Index</tt> annotation are also supported in the <tt><index></tt> element. | ||
+ | |||
+ | <source lang="xml"> | ||
+ | <index name="EMP_NAME_INDEX" table="EMPLOYEE" unique="true"> | ||
+ | <column>F_NAME</column> | ||
+ | <column>L_NAME</column> | ||
+ | </index> | ||
+ | </source> | ||
{{EclipseLink_JPA | {{EclipseLink_JPA | ||
+ | |||
|previous =[[EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Schema_Generation/CascadeOnDelete|@CascadeOnDelete]] | |previous =[[EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Schema_Generation/CascadeOnDelete|@CascadeOnDelete]] | ||
|up =[[EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Schema_Generation|Schema Generation]] | |up =[[EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Schema_Generation|Schema Generation]] | ||
− | |next =[[EclipseLink/UserGuide/JPA/Advanced_JPA_Development/ | + | |next =[[EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Schema_Generation/Appending_strings_to_CREATE_TABLE_statements|Appending Strings to CREATE TABLE Statements]] |
|version=2.2.0 DRAFT}} | |version=2.2.0 DRAFT}} |
Latest revision as of 07:28, 17 April 2013
For current information, please see "@Index" in the Java Persistence API (JPA) Extensions Reference for EclipseLink: http://eclipse.org/eclipselink/documentation/latest/jpa/extensions/a_index.htm
EclipseLink JPA
EclipseLink | |
Website | |
Download | |
Community | |
Mailing List • Forums • IRC • mattermost | |
Issues | |
Open • Help Wanted • Bug Day | |
Contribute | |
Browse Source |
Key API
Native API
@Index
An index is a database structure defined for a table, to improve query and look-up performance for a set of columns. Use the @Index annotation in code or the <index> element in the eclipselink-orm.xml descriptor to create an index on a table.
An index can be defined on an entity or on an attribute. For the entity it must define a set of columns to index.
Index creation is database specific. Some databases may not support indexes. Most databases auto-index primary key and foriegn key columns. Some databases support advanced index DDL options. To create more advanced index DDL, a DDL script or native query can be used.
Attribute | Description | Default | Required? |
---|---|---|---|
catalog | The catalog of the INDEX. | Default catalog | No |
columnNames | Specify the set of columns to define the index on. | For an Entity , the table. For an attribute, the table and column. | Not required when annotated on a field or method. |
name | The name of the INDEX. | <table>_<column>_INDEX (but a name should be provided) | No |
schema | The schema of the INDEX. | Default schema | No |
table | The table to define the index on, defaults to entities primary table. | The entity's primary table. | No |
unique | Specify whether the index is unique or non-unique. | false | No |
This example defines three indexes, one on first name, one on last name, and a multiple column index on first name and last name.
@Entity @Index(name="EMP_NAME_INDEX", columns={"F_NAME","L_NAME"}) public class Employee{ @Id private long id; @Index @Column(name="F_NAME") private String firstName; @Index @Column(name="L_NAME") private String lastName; ... }
You can also create an index in the eclipselink-orm.xml descriptor using <index>, as shown in the following example. Define columns using the <column> subelement. All the attributes supported in the @Index annotation are also supported in the <index> element.
<index name="EMP_NAME_INDEX" table="EMPLOYEE" unique="true"> <column>F_NAME</column> <column>L_NAME</column> </index>