Feature applied. I wanted to refactor this area for a while, so your
patch has changed a bit :-)
Thanks
Pablo Nussembaum wrote:
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
);
}
-------------------------------------------------------
This SF.Net email is sponsored by Oracle Space Sweepstakes
Want to be the first software developer in space?
Enter now for the Oracle Space Sweepstakes!
http://ads.osdn.com/?ad_id=7393&alloc_id=16281&op=click
_______________________________________________
hibernate-devel mailing list
hibernate-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hibernate-devel