[hibernate-commits] Hibernate SVN: r12760 - in trunk/HibernateExt/annotations/src: test/org/hibernate/test/annotations/onetomany and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Jul 12 16:21:26 EDT 2007


Author: epbernard
Date: 2007-07-12 16:21:25 -0400 (Thu, 12 Jul 2007)
New Revision: 12760

Added:
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Order.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrderByTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrderID.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrderItem.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrderItemID.java
Modified:
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/CollectionBinder.java
Log:
ANN-617 @OrderBy was not handled properly on properties from @IdClass or @EmbeddedId

Modified: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/CollectionBinder.java
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/CollectionBinder.java	2007-07-12 16:04:21 UTC (rev 12759)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/CollectionBinder.java	2007-07-12 20:21:25 UTC (rev 12760)
@@ -847,7 +847,13 @@
 					}
 					PersistentClass pc = p.getPersistentClass();
 					String table;
-					if (pc != associatedClass) {
+					if (pc == null) {
+						//we are touching a @IdClass property, the pc is not set
+						//this means pc == associatedClass
+						//TODO check whether @ManyToOne @JoinTable in @IdClass used for @OrderBy works: doh!
+						table = "";
+					}
+					else if (pc != associatedClass) {
 						table = pc.getTable().getQuotedName() + ".";
 					}
 					else {

Added: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Order.java
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Order.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Order.java	2007-07-12 20:21:25 UTC (rev 12760)
@@ -0,0 +1,70 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.List;
+import java.util.ArrayList;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+
+ at Entity
+ at Table( name = "Order_tbl" )
+ at IdClass( OrderID.class )
+public class Order {
+	private String schoolId;
+	private Integer schoolIdSort;
+	private Integer academicYear;
+
+	private List<OrderItem> itemList = new ArrayList<OrderItem>();
+
+	public boolean equals(Object obj) {
+		return super.equals( obj );
+	}
+
+	public int hashCode() {
+		return 10;
+	}
+
+	@Id
+	public Integer getAcademicYear() {
+		return this.academicYear;
+	}
+
+	protected void setAcademicYear(Integer academicYear) {
+		this.academicYear = academicYear;
+	}
+
+	@Id
+	public String getSchoolId() {
+		return this.schoolId;
+	}
+
+	protected void setSchoolId(String schoolId) {
+		this.schoolId = schoolId;
+	}
+
+	@OneToMany( mappedBy = "order" )
+	@OrderBy( "dayNo desc" )
+	public List<OrderItem> getItemList() {
+		return this.itemList;
+	}
+
+	public void setItemList(List<OrderItem> itemList) {
+		this.itemList = itemList;
+	}
+
+	public Integer getSchoolIdSort() {
+		return this.schoolIdSort;
+	}
+
+	public void setSchoolIdSort(Integer schoolIdSort) {
+		this.schoolIdSort = schoolIdSort;
+	}
+
+
+}
\ No newline at end of file

Added: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrderByTest.java
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrderByTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrderByTest.java	2007-07-12 20:21:25 UTC (rev 12760)
@@ -0,0 +1,52 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class OrderByTest extends TestCase {
+	public void testOrderByOnIdClassProperties() throws Exception {
+		Session s = openSession( );
+		s.getTransaction().begin();
+		Order o = new Order();
+		o.setAcademicYear( 2000 );
+		o.setSchoolId( "Supelec" );
+		o.setSchoolIdSort( 1 );
+		s.persist( o );
+		OrderItem oi1 = new OrderItem();
+		oi1.setAcademicYear( 2000 );
+		oi1.setDayName( "Monday" );
+		oi1.setSchoolId( "Supelec" );
+		oi1.setOrder( o );
+		oi1.setDayNo( 23 );
+		s.persist( oi1 );
+		OrderItem oi2 = new OrderItem();
+		oi2.setAcademicYear( 2000 );
+		oi2.setDayName( "Tuesday" );
+		oi2.setSchoolId( "Supelec" );
+		oi2.setOrder( o );
+		oi2.setDayNo( 30 );
+		s.persist( oi2 );
+		s.flush();
+		s.clear();
+
+		OrderID oid = new OrderID();
+		oid.setAcademicYear( 2000 );
+		oid.setSchoolId( "Supelec" );
+		o = (Order) s.get( Order.class, oid );
+		assertEquals( 30, o.getItemList().get( 0 ).getDayNo().intValue() );
+
+		s.getTransaction().rollback();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[] {
+				Order.class,
+				OrderItem.class
+		};
+	}
+}

Added: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrderID.java
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrderID.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrderID.java	2007-07-12 20:21:25 UTC (rev 12760)
@@ -0,0 +1,31 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class OrderID implements Serializable {
+	private String schoolId;
+	private Integer academicYear;
+
+	@Column( name = "Academic_Yr" )
+	public Integer getAcademicYear() {
+		return this.academicYear;
+	}
+
+	public void setAcademicYear(Integer academicYear) {
+		this.academicYear = academicYear;
+	}
+
+	@Column( name = "School_Id" )
+	public String getSchoolId() {
+		return this.schoolId;
+	}
+
+	public void setSchoolId(String schoolId) {
+		this.schoolId = schoolId;
+	}
+}
\ No newline at end of file

Added: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrderItem.java
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrderItem.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrderItem.java	2007-07-12 20:21:25 UTC (rev 12760)
@@ -0,0 +1,73 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+ at Entity
+ at Table( name = "OrderItem_tbl" )
+ at IdClass( OrderItemID.class )
+public class OrderItem {
+	String schoolId;
+	Integer academicYear;
+	Integer dayNo;
+	String dayName;
+	private Order order;
+
+	@Id
+	public Integer getDayNo() {
+		return dayNo;
+	}
+
+	public void setDayNo(Integer dayNo) {
+		this.dayNo = dayNo;
+	}
+
+	@Id
+	public String getSchoolId() {
+		return schoolId;
+	}
+
+	public void setSchoolId(String schoolId) {
+		this.schoolId = schoolId;
+	}
+
+	@Id
+	public Integer getAcademicYear() {
+		return academicYear;
+	}
+
+	public void setAcademicYear(Integer academicYear) {
+		this.academicYear = academicYear;
+	}
+
+	@Column( name = "Day_Name" )
+	public String getDayName() {
+		return dayName;
+	}
+
+	public void setDayName(String dayName) {
+		this.dayName = dayName;
+	}
+
+	@ManyToOne( fetch = FetchType.LAZY )
+	@JoinColumns( {
+	@JoinColumn( name = "School_Id", referencedColumnName = "School_Id", insertable = false, updatable = false ),
+	@JoinColumn( name = "Academic_Yr", referencedColumnName = "Academic_Yr", insertable = false, updatable = false )
+			} )
+	public Order getOrder() {
+		return this.order;
+	}
+
+	public void setOrder(Order order) {
+		this.order = order;
+	}
+
+}

Added: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrderItemID.java
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrderItemID.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrderItemID.java	2007-07-12 20:21:25 UTC (rev 12760)
@@ -0,0 +1,41 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class OrderItemID implements Serializable {
+	String schoolId;
+	Integer academicYear;
+	Integer dayNo;
+
+	@Column( name = "Academic_Yr" )
+	public Integer getAcademicYear() {
+		return this.academicYear;
+	}
+
+	public void setAcademicYear(Integer academicYear) {
+		this.academicYear = academicYear;
+	}
+
+	@Column( name = "Day_No" )
+	public Integer getDayNo() {
+		return this.dayNo;
+	}
+
+	public void setDayNo(Integer dayNo) {
+		this.dayNo = dayNo;
+	}
+
+	@Column( name = "School_Id" )
+	public String getSchoolId() {
+		return this.schoolId;
+	}
+
+	public void setSchoolId(String schoolId) {
+		this.schoolId = schoolId;
+	}
+}




More information about the hibernate-commits mailing list