Difference between revisions of "EclipseLink/UserGuide/JPA/Advanced JPA Development/Schema Generation/Index"

From Eclipsepedia

Jump to: navigation, search
m
m
 
(27 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
Line 6: Line 17:
 
|api=y
 
|api=y
 
|apis=  
 
|apis=  
* [http://www.eclipse.org/eclipselink/api/latest/org/eclipse/persistence/annotations/Index.html Index]
+
* [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]
 
* [http://www.eclipse.org/eclipselink/api/latest/org/eclipse/persistence/tools/schemaframework/IndexDefinition.html IndexDefinition]
 
}}
 
}}
  
=@Index Annotation and <index> XML=
+
=@Index=
 
+
--THIS PAGE IS IN PROGRESS. Please see Discussion page.--
+
  
 
An index is a database structure defined for a table, to improve query and look-up performance for a set of columns.  
 
An index is a database structure defined for a table, to improve query and look-up performance for a set of columns.  
Use the <tt>@Index</tt> annotation in code or the <tt><index></tt> element in the <tt>orm.xml</tt> desciptor to create an index on a table.  
+
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.   
+
An index can be defined on an entity or on an attribute. For the entity it must define a set of columns to index.   
  
<source lang="java">
+
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.
// Need code sample.
+
</source>
+
  
 
{{EclipseLink_AttributeTable
 
{{EclipseLink_AttributeTable
Line 29: Line 38:
 
  <td>'''<tt>catalog</tt>'''</td>
 
  <td>'''<tt>catalog</tt>'''</td>
 
  <td>The catalog of the INDEX.</td>
 
  <td>The catalog of the INDEX.</td>
  <td>?</td>
+
  <td>Default catalog </td>
 
  <td>No</td>
 
  <td>No</td>
 
</tr>
 
</tr>
Line 41: Line 50:
 
  <td>'''<tt>name</tt>'''</td>
 
  <td>'''<tt>name</tt>'''</td>
 
  <td>The name of the INDEX.</td>
 
  <td>The name of the INDEX.</td>
  <td><tt>_<column>_INDEX</tt> (but a name should be provided)</td>
+
  <td><tt>&lt;table&gt;_<column>_INDEX</tt> (but a name should be provided)</td>
 
  <td>No</td>
 
  <td>No</td>
 
</tr>
 
</tr>
Line 47: Line 56:
 
  <td>'''<tt>schema</tt>'''</td>
 
  <td>'''<tt>schema</tt>'''</td>
 
  <td>The schema of the INDEX.</td>
 
  <td>The schema of the INDEX.</td>
  <td><tt>?</tt></td>
+
  <td>Default schema</td>
 
  <td>No</td>
 
  <td>No</td>
 
</tr>
 
</tr>
Line 64: Line 73:
 
}}
 
}}
  
<!--
+
This example defines three indexes, one on first name, one on last name, and a multiple column index on first name and last name.
<tt>@Index</tt> creates an <tt>IndexDefinition</tt> and stores it on the descriptor's <tt>DatabaseTable</tt>. During default schema generation the <tt>DefaultSchemaGenerator</tt> adds the <tt>IndexDefinition</tt> to the <tt>TableDefinition</tt> to be created. The <tt>IndexDefinition</tt> is used to create indexes for primary key and unique constraints. Support for indexes is defined in the platform. By default a platform is assumed to support indexes. MySQL requires special drop syntax to include the table name in the drop statement. -->
+
<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>
  
= Configuration File =
 
  
Create an index in <tt>orm.xml</tt> using <tt><index></tt>, as follows:
+
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">
 
<source lang="xml">
 
<index name="EMP_NAME_INDEX" table="EMPLOYEE" unique="true">
 
<index name="EMP_NAME_INDEX" table="EMPLOYEE" unique="true">
Line 78: Line 101:
  
 
{{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/Performance|Performance]]
+
|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



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 JPA

link="http://wiki.eclipse.org/EclipseLink"
EclipseLink
Website
Download
Community
Mailing ListForumsIRC
Bugzilla
Open
Help Wanted
Bug Day
Contribute
Browse Source

Elug api package icon.png Key API

Elug api package icon.png Native API


[edit] @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.

@Index Attributes
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>

Eclipselink-logo.gif
Version: 2.2.0 DRAFT
Other versions...