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;
+
+
+@TypeDef(
+ name = "lowerCase",
+ typeClass = CasterStringType.class,
+ parameters = {
+ @Parameter(name = "cast", value = "lower")
+ }
+)
+
+@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;
+
+
+@TypeDef(
+ name = "upperCase",
+ typeClass = CasterStringType.class,
+ parameters = {
+ @Parameter(name = "cast", value = "upper")
+ }
+)
+
+@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;
+
+@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;
+ }
+
+}
Show replies by date