Skip to content

Commit 42a5096

Browse files
author
graeme
committed
changed to use groovy's built in type conversion as a first resort
git-svn-id: https://svn.codehaus.org/grails/trunk@4146 1cfb16fd-6d17-0410-8ff1-b7e8e1e2867d
1 parent 95103ea commit 42a5096

File tree

3 files changed

+23
-4
lines changed

3 files changed

+23
-4
lines changed

src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/ExistsPersistentMethod.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.codehaus.groovy.grails.commons.DomainClassArtefactHandler;
1919
import org.codehaus.groovy.grails.commons.GrailsApplication;
2020
import org.codehaus.groovy.grails.commons.GrailsDomainClass;
21+
import org.codehaus.groovy.runtime.DefaultGroovyMethods;
2122
import org.hibernate.SessionFactory;
2223
import org.springframework.beans.SimpleTypeConverter;
2324

@@ -61,7 +62,12 @@ protected Object doInvokeInternal(Class clazz, String methodName, Object[] argum
6162
if(domainClass != null) {
6263
Class identityType = domainClass.getIdentifier().getType();
6364
if(!identityType.isAssignableFrom(arg.getClass())) {
64-
arg = typeConverter.convertIfNecessary(arg, identityType);
65+
if(arg instanceof Number && Long.class.equals(identityType)) {
66+
arg = DefaultGroovyMethods.toLong((Number)arg);
67+
}
68+
else {
69+
arg = typeConverter.convertIfNecessary(arg, identityType);
70+
}
6571
}
6672
}
6773

src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/GetAllPersistentMethod.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.codehaus.groovy.grails.commons.DomainClassArtefactHandler;
1919
import org.codehaus.groovy.grails.commons.GrailsApplication;
2020
import org.codehaus.groovy.grails.commons.GrailsDomainClass;
21+
import org.codehaus.groovy.runtime.DefaultGroovyMethods;
2122
import org.hibernate.*;
2223
import org.hibernate.criterion.Restrictions;
2324
import org.springframework.orm.hibernate3.HibernateCallback;
@@ -78,7 +79,12 @@ protected Object doInvokeInternal(final Class clazz, String methodName, Object[]
7879
// convert arguments to required identifier type
7980
for (int i = 0; i < arguments.length; i++) {
8081
if (!identityType.isAssignableFrom(arguments[i].getClass())) {
81-
args.add(typeConverter.convertIfNecessary(arguments[i], identityType));
82+
if(arguments[i] instanceof Number && Long.class.equals(identityType)) {
83+
args.add(DefaultGroovyMethods.toLong((Number)arguments[i]));
84+
}
85+
else {
86+
args.add(typeConverter.convertIfNecessary(arguments[i], identityType));
87+
}
8288
} else {
8389
args.add(arguments[i]);
8490
}

src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/GetPersistentMethod.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.codehaus.groovy.grails.commons.DomainClassArtefactHandler;
1919
import org.codehaus.groovy.grails.commons.GrailsApplication;
2020
import org.codehaus.groovy.grails.commons.GrailsDomainClass;
21+
import org.codehaus.groovy.runtime.DefaultGroovyMethods;
2122
import org.hibernate.SessionFactory;
2223
import org.springframework.beans.SimpleTypeConverter;
2324

@@ -63,8 +64,14 @@ protected Object doInvokeInternal(final Class clazz, String methodName,
6364
DomainClassArtefactHandler.TYPE, clazz.getName());
6465
if(domainClass != null) {
6566
Class identityType = domainClass.getIdentifier().getType();
66-
if(!identityType.isAssignableFrom(arg.getClass())) {
67-
arg = typeConverter.convertIfNecessary(arg, identityType);
67+
68+
if(!identityType.isAssignableFrom(arg.getClass())) {
69+
if(arg instanceof Number && Long.class.equals(identityType)) {
70+
arg = DefaultGroovyMethods.toLong((Number)arg);
71+
}
72+
else {
73+
arg = typeConverter.convertIfNecessary(arg, identityType);
74+
}
6875
}
6976
}
7077

0 commit comments

Comments
 (0)