EclipseLink/Examples/JPA/2.0/OrderColumns

From Eclipsepedia

Jump to: navigation, search

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;
  ...
}

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>