Hello,
    I found that annotations ignore the "@Type" definition for an "@Id"
property.
    I attach a patch to solve the problem.

Pablo Nussembaum.

@Entity
@Table(name="program")
public class Program {
    private ProgramCode code = null;

    @Id(generate=GeneratorType.NONE)
    @Column(name="id")
    @Type(type="programCode") //This definition was ignored by the
annotations
    public ProgramCode getCode(){
        return code;
    }
.
.
.
}
Index: AnnotationBinder.java
===================================================================
RCS file: 
/cvsroot/hibernate/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java,v
retrieving revision 1.82
diff -u -r1.82 AnnotationBinder.java
--- AnnotationBinder.java       6 May 2005 10:57:39 -0000       1.82
+++ AnnotationBinder.java       11 May 2005 00:07:12 -0000
@@ -1,16 +1,77 @@
 //$Id: AnnotationBinder.java,v 1.82 2005/05/06 10:57:39 epbernard Exp $
 package org.hibernate.cfg;
 
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.ResourceBundle;
+import java.util.Set;
+
+import javax.persistence.AccessType;
+import javax.persistence.AssociationTable;
+import javax.persistence.AttributeOverride;
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.DiscriminatorType;
+import javax.persistence.Embeddable;
+import javax.persistence.Embedded;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedIdTable;
+import javax.persistence.GeneratorType;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.InheritanceJoinColumn;
+import javax.persistence.InheritanceJoinColumns;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.Lob;
+import javax.persistence.LobType;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Serialized;
+import javax.persistence.TableGenerator;
+import javax.persistence.Transient;
+import javax.persistence.UniqueConstraint;
+import javax.persistence.Version;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.hibernate.AnnotationException;
 import org.hibernate.AssertionFailure;
 import org.hibernate.FetchMode;
 import org.hibernate.MappingException;
-import org.hibernate.validate.ClassValidator;
-import org.hibernate.annotations.*;
+import org.hibernate.annotations.BatchSize;
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.Cascade;
+import org.hibernate.annotations.CascadeType;
+import org.hibernate.annotations.Check;
+import org.hibernate.annotations.Filter;
+import org.hibernate.annotations.FilterDef;
+import org.hibernate.annotations.FilterDefs;
+import org.hibernate.annotations.Filters;
+import org.hibernate.annotations.ParamDef;
+import org.hibernate.annotations.Parameter;
+import org.hibernate.annotations.Proxy;
 import org.hibernate.annotations.Type;
 import org.hibernate.annotations.TypeDef;
+import org.hibernate.annotations.TypeDefs;
+import org.hibernate.annotations.Where;
 import org.hibernate.cfg.annotations.AbstractCollectionBinder;
 import org.hibernate.cfg.annotations.EntityBinder;
 import org.hibernate.cfg.annotations.QueryBinder;
@@ -20,28 +81,32 @@
 import org.hibernate.id.MultipleHiLoPerTableGenerator;
 import org.hibernate.id.PersistentIdentifierGenerator;
 import org.hibernate.id.TableHiLoGenerator;
-import org.hibernate.mapping.*;
+import org.hibernate.mapping.Component;
+import org.hibernate.mapping.DependantValue;
+import org.hibernate.mapping.IdGenerator;
+import org.hibernate.mapping.Join;
+import org.hibernate.mapping.JoinedSubclass;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.RootClass;
+import org.hibernate.mapping.SimpleValue;
+import org.hibernate.mapping.Subclass;
 import org.hibernate.mapping.Table;
+import org.hibernate.mapping.UnionSubclass;
+import org.hibernate.mapping.Value;
 import org.hibernate.persister.entity.JoinedSubclassEntityPersister;
 import org.hibernate.persister.entity.SingleTableEntityPersister;
 import org.hibernate.persister.entity.UnionSubclassEntityPersister;
-import org.hibernate.type.*;
+import org.hibernate.type.ByteArrayBlobType;
+import org.hibernate.type.CharacterArrayClobType;
+import org.hibernate.type.ForeignKeyDirection;
+import org.hibernate.type.PrimitiveByteArrayBlobType;
+import org.hibernate.type.PrimitiveCharacterArrayClobType;
+import org.hibernate.type.StringClobType;
+import org.hibernate.type.TypeFactory;
 import org.hibernate.util.ReflectHelper;
 import org.hibernate.util.StringHelper;
-
-import javax.persistence.*;
-import javax.persistence.Column;
-import javax.persistence.DiscriminatorType;
-import javax.persistence.Entity;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.*;
-import java.util.List;
-import java.util.Map;
+import org.hibernate.validate.ClassValidator;
 
 /**
  * JSR 175 annotation binder
@@ -639,6 +704,7 @@
                        //for now columns.length > 1 is impossible for @Id
                        String generatorType = idAnn != null ? generatorType( 
idAnn.generate() ) : "assigned";
                        String generator = idAnn != null ? idAnn.generator() : 
ANNOTATION_STRING_DEFAULT;
+                       Type annType = (Type) 
annotedElt.getAnnotation(Type.class);                     
                        bindId(
                                generatorType,
                                generator,
@@ -651,7 +717,8 @@
                                columnOverride,
                                propertyAccess,
                                entityBinder,
-                               mappings);
+                               mappings,
+                               annType);
                        if ( log.isDebugEnabled() ) {
                                log.debug("Bind " + (isComponent ? 
"@Id":"@EmbeddedId") + " on " + inferredData.getPropertyName() );
                        }
@@ -1021,7 +1091,7 @@
        private static void bindId(String generatorType, String generatorName,
                                                           
AnnotedElementInferredData inferredData, Ejb3Column column, RootClass rootClass,
                                                           Map<String, 
IdGenerator> localGenerators, HashMap<String, Properties> localGeneratorTables, 
boolean isComposite, Map<String, Column[]> columnOverride, boolean 
isPropertyAccess,
-                                                          EntityBinder 
entityBinder, ExtendedMappings mappings)  {
+                                                          EntityBinder 
entityBinder, ExtendedMappings mappings, Type annType)  {
                /*
                 * Fill simple value and property since and Id is a property
                 */
@@ -1030,14 +1100,22 @@
                if (isComposite) {
                        id = 
fillComponent(PropertyHolderBuilder.buildPropertyHolder(rootClass), 
inferredData, isPropertyAccess, false, entityBinder, columnOverride, mappings);
                }
-               else {
-                       column.forceNotNull(); //this is an id
+               else {                  
+                       Properties typeParameters = new Properties();
+                       String typeName = ""; 
+                       if (annType != null) {
+                               typeName = annType.type();
+                               for ( Parameter param : annType.parameters() ) {
+                                       typeParameters.setProperty( 
param.name(), param.value() );
+                               }
+                       }
+                       column.forceNotNull(); //this is an id                  
                        id = makeSimpleValue(
                                        inferredData.getPropertyName(),
                                        inferredData.getReturnedClassName(),
                                        column, persistentClassName,
-                                       "",
-                                       new Properties(),
+                                       typeName,
+                                       typeParameters,
                                        mappings
                        );
                }

Reply via email to