OrderBy javax vs hibernate
blabno Oct 14, 2009 1:29 PMI have two classes : abstract Location, Country and Province. Country has collection of provinces and it should be ordered by province name. Name attribute is defined in Location. If I used javax.persistence.OrderBy annotation on it then everything works fine in production and dev profile, but in test entityManager creates such query :
select provinces0_.COUNTRY_ID as COUNTRY1_1_, provinces0_.ID as ID1_, provinces0_.ID as ID104_0_, provinces0_.EMBLEM as EMBLEM104_0_, provinces0_.NAME as NAME104_0_, provinces0_.COUNTRY_ID as COUNTRY1_105_0_ from PROVINCE provinces0_ where provinces0_.COUNTRY_ID=? order by Location.NAME asc
Please note order by clause. It uses tablename of parent abstract class !
Problem can be solved by using @org.hibernate.annotations.OrderBy instead of @javax.persistence.OrderBy.
Why is @javax.persistence.OrderBy treated different in test environment then in dev or production ?
For dev and production I use jboss-4.2.2.GA.
@TableGenerator(name = "LOCATION_TABLES_GENERATOR", allocationSize = 1) @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @Entity public abstract class Location implements Serializable { @Id @GeneratedValue @Column(name = "ID") private Long id; @NotNull @Column(name = "NAME", unique = true, nullable = false) private String name; @Column(length = 1000000, name = "EMBLEM") private byte[] emblem; //GETTERS AND SETTERS }
@Entity @Table(name = "COUNTRY") public class Country extends Location { @OrderBy("name") @OneToMany(cascade = CascadeType.ALL, mappedBy = "country") private List<Province> provinces = new ArrayList<Province>(); //GETTERS AND SETTERS }
@Entity @Table(name = "PROVINCE", uniqueConstraints = @UniqueConstraint(columnNames = {"COUNTRY_ID", "NAME"})) public class Province extends Location { @ManyToOne(optional = false) @JoinColumn(name = "COUNTRY_ID", nullable = false) private Country country; //GETTERS AND SETTERS }