[hibernate-commits] Hibernate SVN: r10452 - in trunk/HibernateExt/metadata/src: java/org/hibernate/cfg java/org/hibernate/reflection/java test/org/hibernate/test/annotations/generics

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Sep 5 12:49:07 EDT 2006


Author: epbernard
Date: 2006-09-05 12:49:05 -0400 (Tue, 05 Sep 2006)
New Revision: 10452

Added:
   trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/State.java
   trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/StateType.java
Modified:
   trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java
   trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXClass.java
   trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/Gene.java
   trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java
Log:
ANN-181 do not raise unresolved type exception if a @Type is defined

Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java	2006-09-05 06:53:46 UTC (rev 10451)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java	2006-09-05 16:49:05 UTC (rev 10452)
@@ -942,7 +942,7 @@
 		log.debug( "Processing " + propertyHolder.getEntityName() + " " + accessType + " annotation" );
 		List<XProperty> properties = annotatedClass.getDeclaredProperties( accessType );
 		for ( XProperty p : properties ) {
-			if ( !p.isTypeResolved() && !hasExplicitTargetEntity( p ) && !mustBeSkipped( p, mappings ) ) {
+			if ( !p.isTypeResolved() && !discoverTypeWithoutReflection( p ) && !mustBeSkipped( p, mappings ) ) {
 				throw new IllegalStateException(
 						"Property " + p + " has an unbound type and no explicit target entity."
 				);
@@ -953,7 +953,7 @@
 		return hasIdentifier;
 	}
 
-	private static boolean hasExplicitTargetEntity(XProperty p) {
+	private static boolean discoverTypeWithoutReflection(XProperty p) {
 		if ( p.isAnnotationPresent( OneToOne.class ) && !p.getAnnotation( OneToOne.class )
 				.targetEntity()
 				.equals( void.class ) ) {
@@ -974,6 +974,9 @@
 				.equals( void.class ) ) {
 			return true;
 		}
+		if (p.isAnnotationPresent( Type.class ) ) {
+			return true;
+		}
 		return false;
 	}
 

Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXClass.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXClass.java	2006-09-05 06:53:46 UTC (rev 10451)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXClass.java	2006-09-05 16:49:05 UTC (rev 10452)
@@ -31,7 +31,6 @@
 	}
 
 	public XClass getSuperclass() {
-		//FIXME we do not pass the class TypeEnvironment here
 		//return getFactory().toXClass( toClass().getSuperclass(), getFactory().getTypeEnvironment( toClass() ) );
 		return getFactory().toXClass( toClass().getSuperclass(),
 				new CompoundTypeEnvironment( getTypeEnvironment(), getFactory().getTypeEnvironment( toClass() )
@@ -45,7 +44,7 @@
 		XClass[] xClasses = new XClass[length];
 		//TypeEnvironment environment = getFactory().getTypeEnvironment( toClass() );
 		TypeEnvironment environment =
-				new CompoundTypeEnvironment( getTypeEnvironment(), getFactory().getTypeEnvironment( toClass() ) );		
+				new CompoundTypeEnvironment( getTypeEnvironment(), getFactory().getTypeEnvironment( toClass() ) );
 		for ( int index = 0; index < length ; index++ ) {
 			xClasses[index] = getFactory().toXClass( classes[index], environment );
 		}

Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/Gene.java
===================================================================
--- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/Gene.java	2006-09-05 06:53:46 UTC (rev 10451)
+++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/Gene.java	2006-09-05 16:49:05 UTC (rev 10452)
@@ -5,14 +5,26 @@
 import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 
+import org.hibernate.annotations.Type;
+
 /**
  * @author Paolo Perrotta
  */
 @Entity
-public class Gene<T> {
+public class Gene<T, STE extends Enum> {
 
 	private Integer id;
+	private STE state;
 
+	@Type(type="org.hibernate.test.annotations.generics.StateType")
+	public STE getState() {
+		return state;
+	}
+
+	public void setState(STE state) {
+		this.state = state;
+	}
+
 	@Id
 	@GeneratedValue
 	public Integer getId() {

Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/State.java
===================================================================
--- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/State.java	2006-09-05 06:53:46 UTC (rev 10451)
+++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/State.java	2006-09-05 16:49:05 UTC (rev 10452)
@@ -0,0 +1,10 @@
+//$Id: $
+package org.hibernate.test.annotations.generics;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public enum State {
+	ACTIVE,
+	DORMANT
+}

Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/StateType.java
===================================================================
--- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/StateType.java	2006-09-05 06:53:46 UTC (rev 10451)
+++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/StateType.java	2006-09-05 16:49:05 UTC (rev 10452)
@@ -0,0 +1,69 @@
+//$Id: $
+package org.hibernate.test.annotations.generics;
+
+import java.io.Serializable;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.PreparedStatement;
+import java.sql.Types;
+
+import org.hibernate.usertype.UserType;
+import org.hibernate.HibernateException;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class StateType implements UserType {
+	public int[] sqlTypes() {
+		return new int[] {
+			Types.INTEGER
+		};
+	}
+
+	public Class returnedClass() {
+		return State.class;
+	}
+
+	public boolean equals(Object x, Object y) throws HibernateException {
+		return x == y;
+	}
+
+	public int hashCode(Object x) throws HibernateException {
+		return x.hashCode();
+	}
+
+	public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
+		int result = rs.getInt( names[0] );
+		if ( rs.wasNull() ) return null;
+		return State.values()[result];
+	}
+
+	public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
+		if (value == null) {
+			st.setNull( index, Types.INTEGER );
+		}
+		else {
+			st.setInt( index, ( (State) value ).ordinal() );
+		}
+	}
+
+	public Object deepCopy(Object value) throws HibernateException {
+		return value;
+	}
+
+	public boolean isMutable() {
+		return false;
+	}
+
+	public Serializable disassemble(Object value) throws HibernateException {
+		return (Serializable) value;
+	}
+
+	public Object assemble(Serializable cached, Object owner) throws HibernateException {
+		return cached;
+	}
+
+	public Object replace(Object original, Object target, Object owner) throws HibernateException {
+		return original;
+	}
+}

Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java
===================================================================
--- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java	2006-09-05 06:53:46 UTC (rev 10451)
+++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java	2006-09-05 16:49:05 UTC (rev 10452)
@@ -19,6 +19,20 @@
 		s.close();
 	}
 
+	public void testAcceptsUnresolvedPropertyTypesIfATypeExplicitlySet() {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Gene item = new Gene();
+		item.setState( State.DORMANT );
+		s.persist( item );
+		s.flush();
+		s.clear();
+		item = (Gene) s.get( Gene.class, item.getId() );
+		assertEquals( State.DORMANT, item.getState() );
+		tx.rollback();
+		s.close();
+	}
+
 	@Override
 	protected Class[] getMappings() {
 		return new Class[]{




More information about the hibernate-commits mailing list