From: <hib...@li...> - 2006-05-04 20:46:49
|
Author: epbernard Date: 2006-05-04 16:46:47 -0400 (Thu, 04 May 2006) New Revision: 9882 Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Employee.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Employer.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/ManyToManyTest.java Log: ANN-339 use colelction.setManyToManyOrderBy Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java 2006-05-04 19:41:49 UTC (rev 9881) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java 2006-05-04 20:46:47 UTC (rev 9882) @@ -803,9 +803,15 @@ } } } - if ( ! isCollectionOfEntities && StringHelper.isNotEmpty( hqlOrderBy ) ) { - //@ManyToMany can't handle order by on the target table - collValue.setOrderBy( hqlOrderBy ); + if ( StringHelper.isNotEmpty( hqlOrderBy ) ) { + if ( ! isCollectionOfEntities ) { + collValue.setOrderBy( hqlOrderBy ); + } + else { + collValue.setManyToManyOrdering( + buildOrderByClauseFromHql( hqlOrderBy, collectionEntity, collValue.getRole() ) + ); + } } boolean mappedBy = ! AnnotationBinder.isDefault( joinColumns[0].getMappedBy() ); if ( mappedBy ) { Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Employee.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Employee.java 2006-05-04 19:41:49 UTC (rev 9881) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Employee.java 2006-05-04 20:46:47 UTC (rev 9882) @@ -8,6 +8,7 @@ import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToMany; +import javax.persistence.Column; import org.hibernate.annotations.Cascade; @@ -20,7 +21,17 @@ public class Employee implements Serializable { private Integer id; private Collection<Employer> employers; + private String name; + @Column(name="fld_name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + @Id @GeneratedValue public Integer getId() { Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Employer.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Employer.java 2006-05-04 19:41:49 UTC (rev 9881) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/Employer.java 2006-05-04 20:46:47 UTC (rev 9882) @@ -10,6 +10,7 @@ import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; +import javax.persistence.OrderBy; import org.hibernate.annotations.Cascade; @@ -33,6 +34,7 @@ inverseJoinColumns = {@JoinColumn(name = "EMPEE_ID")} ) @Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE) + @OrderBy("name") public Collection getEmployees() { return employees; } Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/ManyToManyTest.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/ManyToManyTest.java 2006-05-04 19:41:49 UTC (rev 9881) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/manytomany/ManyToManyTest.java 2006-05-04 20:46:47 UTC (rev 9882) @@ -218,6 +218,44 @@ s.close(); } + public void testOrderBy() throws Exception { + Session s; + Transaction tx; + s = openSession(); + tx = s.beginTransaction(); + Employer er = new Employer(); + Employee ee = new Employee(); + ee.setName( "Emmanuel" ); + Employee ee2 = new Employee(); + ee2.setName( "Alice" ); + s.persist( ee ); + s.persist( ee2 ); + Set erColl = new HashSet(); + Collection eeColl = new ArrayList(); + Collection eeColl2 = new ArrayList(); + erColl.add( ee ); + erColl.add( ee2 ); + eeColl.add( er ); + eeColl2.add( er ); + er.setEmployees( erColl ); + ee.setEmployers( eeColl ); + ee2.setEmployers( eeColl2 ); + //s.persist(ee); + + s.flush(); + s.clear(); + + er = (Employer) s.get( Employer.class, er.getId() ); + assertNotNull( er ); + assertNotNull( er.getEmployees() ); + assertEquals( 2, er.getEmployees().size() ); + Employee eeFromDb = (Employee) er.getEmployees().iterator().next(); + assertEquals( ee2.getName(), eeFromDb.getName() ); + tx.rollback(); + s.close(); + + } + public void testRemoveInBetween() throws Exception { Session s; Transaction tx; |