[hibernate-commits] Hibernate SVN: r17531 - in core/trunk/annotations/src: test/java/org/hibernate/test/annotations/entity and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Sep 22 13:43:49 EDT 2009


Author: epbernard
Date: 2009-09-22 13:43:48 -0400 (Tue, 22 Sep 2009)
New Revision: 17531

Added:
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/FirstName.java
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/LastName.java
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/Name.java
Modified:
   core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java
Log:
HHH-4232 TypeDef support when used on @Embeddable or @MappedSuperClass classes

Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java	2009-09-22 17:19:24 UTC (rev 17530)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java	2009-09-22 17:43:48 UTC (rev 17531)
@@ -429,12 +429,13 @@
 		//TODO: be more strict with secondarytable allowance (not for ids, not for secondary table join columns etc)
 		InheritanceState inheritanceState = inheritanceStatePerClass.get( clazzToProcess );
 		AnnotatedClassType classType = mappings.getClassType( clazzToProcess );
-		
+
 		//Queries declared in MappedSuperclass should be usable in Subclasses
-		if ( AnnotatedClassType.EMBEDDABLE_SUPERCLASS.equals( classType )) {
-			bindQueries(clazzToProcess, mappings );
+		if ( AnnotatedClassType.EMBEDDABLE_SUPERCLASS.equals( classType ) ) {
+			bindQueries( clazzToProcess, mappings );
+			bindTypeDefs(clazzToProcess, mappings);
 		}
-		
+
 		if ( AnnotatedClassType.EMBEDDABLE_SUPERCLASS.equals( classType ) //will be processed by their subentities
 				|| AnnotatedClassType.NONE.equals( classType ) //to be ignored
 				|| AnnotatedClassType.EMBEDDABLE.equals( classType ) //allow embeddable element declaration
@@ -1942,6 +1943,9 @@
 		);
 		List<PropertyData> classElements = new ArrayList<PropertyData>();
 		XClass returnedClassOrElement = inferredData.getClassOrElement();
+
+		//embeddable elements can have type defs
+		bindTypeDefs(returnedClassOrElement, mappings);
 		addElementsOfAClass(
 				classElements,
 				subHolder,

Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java	2009-09-22 17:19:24 UTC (rev 17530)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java	2009-09-22 17:43:48 UTC (rev 17531)
@@ -143,6 +143,33 @@
 
 	}
 
+	//Test import of TypeDefs from MappedSuperclass and 
+	//Embedded classes  
+	public void testImportTypeDefinitions() throws Exception {
+		Name name = new Name();
+		name.setFirstName("SHARATH");
+		LastName lastName = new LastName();
+		lastName.setName("reddy");
+		name.setLastName(lastName);
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist(name);
+		tx.commit();
+		s.close();
+		
+		s = openSession();
+		tx = s.beginTransaction();
+		name = (Name) s.get( Name.class, name.getId() );
+		assertNotNull( name );
+		assertEquals( "sharath", name.getFirstName() );
+		assertEquals( "REDDY", name.getLastName().getName() );
+		s.delete(name);
+		tx.commit();
+		s.close();
+	}
+
 	public void testNonLazy() throws Exception {
 		Session s;
 		Transaction tx;
@@ -325,7 +352,8 @@
 				Tree.class,
 				Ransom.class,
 				ZipCode.class,
-				Flight.class
+				Flight.class,
+				Name.class
 		};
 	}
 

Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/FirstName.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/FirstName.java	                        (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/FirstName.java	2009-09-22 17:43:48 UTC (rev 17531)
@@ -0,0 +1,33 @@
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.MappedSuperclass;
+
+import org.hibernate.annotations.Type;
+import org.hibernate.annotations.TypeDef;
+import org.hibernate.annotations.Parameter;
+
+
+ at TypeDef(
+		name = "lowerCase",
+		typeClass = CasterStringType.class,
+		parameters = {
+			@Parameter(name = "cast", value = "lower")
+		}
+)
+
+ at MappedSuperclass
+public class FirstName {
+
+	@Type(type="lowerCase")
+	private String firstName;
+
+	public String getFirstName() {
+		return firstName;
+	}
+
+	public void setFirstName(String lowerCaseName) {
+		this.firstName = lowerCaseName;
+	}
+	
+	
+}

Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/LastName.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/LastName.java	                        (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/LastName.java	2009-09-22 17:43:48 UTC (rev 17531)
@@ -0,0 +1,33 @@
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Embeddable;
+
+import org.hibernate.annotations.Parameter;
+import org.hibernate.annotations.Type;
+import org.hibernate.annotations.TypeDef;
+
+
+ at TypeDef(
+		name = "upperCase",
+		typeClass = CasterStringType.class,
+		parameters = {
+			@Parameter(name = "cast", value = "upper")
+		}
+)
+
+ at Embeddable
+public class LastName {
+	
+	@Type(type="upperCase")
+	private String lastName;
+
+	public String getName() {
+		return lastName;
+	}
+
+	public void setName(String lowerCaseName) {
+		this.lastName = lowerCaseName;
+	}
+	
+	
+}

Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/Name.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/Name.java	                        (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/Name.java	2009-09-22 17:43:48 UTC (rev 17531)
@@ -0,0 +1,35 @@
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Transient;
+
+ at Entity
+public class Name extends FirstName {
+
+	@Id
+	@GeneratedValue
+	private Integer id;
+
+	@Embedded
+	private LastName lastName;
+	
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public LastName getLastName() {
+		return lastName;
+	}
+
+	public void setLastName(LastName val) {
+		this.lastName = val;
+	}
+
+}



More information about the hibernate-commits mailing list