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