From: <epb...@us...> - 2006-02-13 18:18:38
|
Update of /cvsroot/hibernate/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32558/metadata/src/java/org/hibernate/cfg/annotations Modified Files: EntityBinder.java Log Message: ANN-223 generate disc value even for integers and raise an exception for chars ANN-240 inital work, need test and refinement for @Embeddable Index: EntityBinder.java =================================================================== RCS file: /cvsroot/hibernate/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java,v retrieving revision 1.40 retrieving revision 1.41 diff -u -d -r1.40 -r1.41 --- EntityBinder.java 12 Feb 2006 11:37:54 -0000 1.40 +++ EntityBinder.java 13 Feb 2006 18:18:25 -0000 1.41 @@ -43,6 +43,7 @@ import org.hibernate.mapping.SimpleValue; import org.hibernate.mapping.Table; import org.hibernate.mapping.TableOwner; +import org.hibernate.mapping.Value; import org.hibernate.reflection.ReflectionManager; import org.hibernate.reflection.XAnnotatedElement; import org.hibernate.reflection.XClass; @@ -146,12 +147,7 @@ persistentClass.setClassName( annotatedClass.getName() ); //persistentClass.setDynamic(false); //no longer needed with the Entity name refactoring? persistentClass.setEntityName( annotatedClass.getName() ); - if ( StringHelper.isEmpty( discriminatorValue ) ) { - persistentClass.setDiscriminatorValue( name ); - } - else { - persistentClass.setDiscriminatorValue( discriminatorValue ); - } + bindDiscriminatorValue(); persistentClass.setLazy( lazy ); if ( proxyClass != null ) { @@ -211,6 +207,28 @@ } } + public void bindDiscriminatorValue() { + if ( StringHelper.isEmpty( discriminatorValue ) ) { + Value discriminator = persistentClass.getDiscriminator(); + if ( discriminator == null ) { + persistentClass.setDiscriminatorValue( name ); + } + else if ( "character".equals( discriminator.getType().getName() ) ) { + throw new AnnotationException("Using default @DiscriminatorValue for a discriminator of type CHAR is not safe"); + } + else if ( "integer".equals( discriminator.getType().getName() ) ) { + persistentClass.setDiscriminatorValue( String.valueOf( name.hashCode() ) ); + } + else { + persistentClass.setDiscriminatorValue( name ); //Spec compliant + } + } + else { + //persistentClass.getDiscriminator() + persistentClass.setDiscriminatorValue( discriminatorValue ); + } + } + int getVersioning(OptimisticLockType type) { switch ( type ) { case VERSION: |