[hibernate-commits] Hibernate SVN: r18609 - in core/trunk/entitymanager/src: test/java/org/hibernate/ejb/test/metadata and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Jan 22 14:21:34 EST 2010


Author: epbernard
Date: 2010-01-22 14:21:33 -0500 (Fri, 22 Jan 2010)
New Revision: 18609

Added:
   core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/DeskWithRawType.java
   core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/EmployeeWithRawType.java
   core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/SecondMetadataTest.java
Modified:
   core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/AttributeFactory.java
Log:
HHH-4834 Take into account that collections can be of raw type.

Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/AttributeFactory.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/AttributeFactory.java	2010-01-22 18:52:56 UTC (rev 18608)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/AttributeFactory.java	2010-01-22 19:21:33 UTC (rev 18609)
@@ -734,12 +734,18 @@
 
 			ParameterizedType signatureType = getSignatureType( member );
 			if ( keyPersistentAttributeType == null ) {
-				elementJavaType = getClassFromGenericArgument( signatureType.getActualTypeArguments()[0] );
+				elementJavaType = signatureType != null ?
+						getClassFromGenericArgument( signatureType.getActualTypeArguments()[0] ) :
+						Object.class; //FIXME and honor targetEntity?
 				keyJavaType = null;
 			}
 			else {
-				keyJavaType = getClassFromGenericArgument( signatureType.getActualTypeArguments()[0] );
-				elementJavaType = getClassFromGenericArgument( signatureType.getActualTypeArguments()[1] );
+				keyJavaType = signatureType != null ?
+						getClassFromGenericArgument( signatureType.getActualTypeArguments()[0] ) :
+						Object.class; //FIXME and honor targetEntity?
+				elementJavaType = signatureType != null ?
+						getClassFromGenericArgument( signatureType.getActualTypeArguments()[1] ) :
+						Object.class; //FIXME and honor targetEntity?
 			}
 
 			this.elementValueContext = new ValueContext() {
@@ -836,9 +842,12 @@
 	}
 
 	public static ParameterizedType getSignatureType(Member member) {
-		return (ParameterizedType) ( Field.class.isInstance( member )
-						? ( (Field) member ).getGenericType()
-						: ( (Method) member ).getGenericReturnType());
+		final java.lang.reflect.Type type = Field.class.isInstance( member )
+				? ( ( Field ) member ).getGenericType()
+				: ( ( Method ) member ).getGenericReturnType();
+		//this is a raw type
+		if ( type instanceof Class ) return null;
+		return (ParameterizedType) type;
 	}
 
 	public static PluralAttribute.CollectionType determineCollectionType(Class javaType) {

Added: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/DeskWithRawType.java
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/DeskWithRawType.java	                        (rev 0)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/DeskWithRawType.java	2010-01-22 19:21:33 UTC (rev 18609)
@@ -0,0 +1,61 @@
+package org.hibernate.ejb.test.metadata;
+
+import java.util.Collection;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class DeskWithRawType implements java.io.Serializable {
+
+	@Id
+	protected String id;
+
+	@Basic
+	protected String name;
+
+	public DeskWithRawType() {
+	}
+
+	@ManyToMany(targetEntity = EmployeeWithRawType.class, cascade = CascadeType.ALL)
+	@JoinTable(name = "DESK_EMPL",
+			joinColumns =
+			@JoinColumn(
+					name = "DESK_FK", referencedColumnName = "ID"),
+			inverseJoinColumns =
+			@JoinColumn(
+					name = "EMPL_FK", referencedColumnName = "ID")
+	)
+	protected Collection employees = new java.util.ArrayList();
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Collection getEmployees() {
+		return employees;
+	}
+
+	public void setEmployees(Collection employees) {
+		this.employees = employees;
+	}
+}

Added: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/EmployeeWithRawType.java
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/EmployeeWithRawType.java	                        (rev 0)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/EmployeeWithRawType.java	2010-01-22 19:21:33 UTC (rev 18609)
@@ -0,0 +1,52 @@
+package org.hibernate.ejb.test.metadata;
+
+import java.util.Collection;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class EmployeeWithRawType implements java.io.Serializable {
+
+
+	@Id
+	protected String id;
+
+	@Basic
+	protected String name;
+
+	@ManyToMany(targetEntity = DeskWithRawType.class, mappedBy = "employees", cascade = CascadeType.ALL)
+	protected Collection desks = new java.util.ArrayList();
+
+	public EmployeeWithRawType() {
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Collection getDesks() {
+		return desks;
+	}
+
+	public void setDesks(Collection desks) {
+		this.desks = desks;
+	}
+}
\ No newline at end of file

Added: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/SecondMetadataTest.java
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/SecondMetadataTest.java	                        (rev 0)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/SecondMetadataTest.java	2010-01-22 19:21:33 UTC (rev 18609)
@@ -0,0 +1,26 @@
+package org.hibernate.ejb.test.metadata;
+
+import javax.persistence.EntityManagerFactory;
+
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class SecondMetadataTest extends TestCase {
+
+	public void testBaseOfService() throws Exception {
+		EntityManagerFactory emf = factory;
+		assertNotNull( emf.getMetamodel() );
+		assertNotNull( emf.getMetamodel().entity( DeskWithRawType.class ) );
+		assertNotNull( emf.getMetamodel().entity( EmployeeWithRawType.class ) );
+	}
+
+	@Override
+	public Class[] getAnnotatedClasses() {
+		return new Class[] {
+				DeskWithRawType.class,
+				EmployeeWithRawType.class
+		};
+	}
+}



More information about the hibernate-commits mailing list