@OrderBy on column in InheritanceType.JOINED root class not
goeh Mar 9, 2006 6:11 PMHi, I'm running jboss-4.0.4RC1 and have a problem.
I have a collection of inherited objects that works fine if I don't put in @OrderBy annotation. But I get an exception if I try to sort on a column that is located in a inheritence root table.
I have isolated the problem with the following entities.
The root entity.
@Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name = "discriminator", length = 1) public abstract class Pet implements Serializable { @Id @GeneratedValue public Long id; @Column(length = 20) public String name; public Integer numLegs; // This is the column I wanna sort on! }
A subclass that extends the root entity.
@Entity @Inheritance @DiscriminatorValue(value = "C") public class Cat extends Pet { @ManyToOne(optional = false) public CatOwner owner; @Column(length = 10) public String furColor; }
An entity that holds a collection with subclass instances.
@Entity public class CatOwner implements Serializable { @Id @GeneratedValue public Long id; @Column(length = 40) public String name; @OneToMany(mappedBy = "owner", fetch = FetchType.LAZY) @OrderBy("numLegs asc") public List<Cat> cats; }
The exception I get when accessing the collection is:
org.hibernate.exception.SQLGrammarException: could not initialize a collection: [test.CatOwner.cats#1] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:65) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.loader.Loader.loadCollection(Loader.java:1926) ... Caused by: java.sql.SQLException: Unknown column 'cats0_.numLegs' in 'order clause' at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2847)
The SQL produced is:
select cats0_.owner_id as owner3_1_, cats0_.id as id1_, cats0_.id as id15_0_, cats0_1_.name as name15_0_, cats0_1_.numLegs as numLegs15_0_, cats0_.owner_id as owner3_18_0_, cats0_.furColor as furColor18_0_ from Cat cats0_ inner join Pet cats0_1_ on cats0_.id=cats0_1_.id where cats0_.owner_id=? order by cats0_.numLegs asc
If I remove the @OrderBy annotation, it works fine.
If this a bug, or am I doing something wrong here?
Should I file a JIRA task?
I tried to change the collection mapping in CatOwner to List and added targetEntity = test.Cat.class to the @OneToMany annotation. But that did not help.