Issue Details (XML | Word | Printable)

Key: OPENJPA-162
Type: Bug Bug
Status: Resolved Resolved
Resolution: Fixed
Priority: Major Major
Assignee: Unassigned
Reporter: Nick Johnson
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
OpenJPA

@OrderBy on @OneToMany does not allow ordering by @Id value

Created: 05/Mar/07 04:10 AM   Updated: 05/Mar/07 08:14 PM
Return to search
Component/s: jpa
Affects Version/s: 0.9.6
Fix Version/s: 0.9.7

Time Tracking:
Not Specified

Environment: Using PostgreSQL 8.1 as the database

Resolution Date: 05/Mar/07 08:14 PM


 Description  « Hide
Using the following annotation:

   @OneToMany(mappedBy="root", fetch=FetchType.LAZY)
    @OrderBy("objectId ASC")
    private List<Message> messages;

I get the exception "Cannot order "net.spatula.tally_ho.model.MessageRoot.messages" on "objectId", because that field is not in the default fetch group. You can only order on fields that will be selected when the related object is loaded."

I should certainly hope that the primary key of the related object is going to be selected when the object is loaded:

    @Id
    @Column(name = "object_id")
    private long objectId;


 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Patrick Linskey added a comment - 05/Mar/07 06:38 PM
I believe that the issue is that the field is not in the current fetch configuration; i.e., it's a lazy relationship. The ID field will clearly be part of the instance that is selected , but when you're selecting Messages, not Threads (or whatever it is that contains Messages).

What happens if you just say '@OrderBy' and leave out the string argument? According to 9.1.28 of the spec, if you just specify @OrderBy and nothing else, the ordering will be ascending by the pk of the associated records, which happens to be what you want.

Abe White added a comment - 05/Mar/07 08:14 PM
Fixed in revision 514847. Test case TestIdOrderedOneMany added.