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:
|