Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
EclipseLink/Examples/JPA/2.0/OrderColumns
Contents
How to maintain order in a List relationship using an OrderColumn
JPA 2.0 adds support for an OrderColumn. An OrderColumn can be used to define an order List on any collection mapping. It is defined through the @OrderColumn annotation or <order-column> XML element.
The OrderColumn is maintained by the mapping and should not be an attribute of the target object. The table for the OrderColumn depends on the mapping. For a OneToMany mapping it will be in the target object's table. For a ManyToMany mapping or a OneToMany using a JoinTable it will be in the join table. For an ElementCollection mapping it will be in the target table.
Example of a collection order column database
EMPLOYEE (table)
| ID | FIRSTNAME | LASTNAME | SALARY |
| 1 | Bob | Way | 50000 |
| 2 | Sarah | Smith | 60000 |
EMPLOYEE_PHONE (table)
| EMPLOYEE_ID | PHONE_ID | INDEX |
| 1 | 1 | 0 |
| 1 | 3 | 1 |
| 2 | 2 | 0 |
| 2 | 4 | 1 |
PHONE(table)
| ID | AREACODE | NUMBER |
| 1 | 613 | 792-7777 |
| 2 | 416 | 798-6666 |
| 3 | 613 | 792-9999 |
| 4 | 416 | 798-5555 |
Example of a collection order column annotation
@Entity public class Employee { @Id private long id; ... @OneToMany @OrderColumn(name="INDEX") private List<Phone> phones; ... } @Entity public class Phone { private int index = 0; }
Example of a collection order column XML
<entity name="Employee" class="org.acme.Employee" access="FIELD"> <attributes> <id name="id"/> <one-to-many name="phones"> <order-column name="INDEX"/> </one-to-many> </attributes> </entity>