मैं गतिशील रूप से Grails में डोमेन ऑब्जेक्ट्स बनाने की कोशिश कर रहा हूं और समस्या का सामना कर रहा हूं कि किसी अन्य डोमेन ऑब्जेक्ट का संदर्भ देने वाली किसी भी संपत्ति के लिए मेटाप्रोपर्टी मुझे बताती है कि इसका प्रकार "java.lang.Object" है और अपेक्षित प्रकार नहीं है।मैं Grails डोमेन ऑब्जेक्ट की किसी संपत्ति का प्रकार (वर्ग) कैसे प्राप्त करूं?
उदाहरण के लिए:
class PhysicalSiteAssessment {
// site info
Site site
Date sampleDate
Boolean rainLastWeek
String additionalNotes
...
एक डोमेन वर्ग है, जो किसी अन्य डोमेन वर्ग "साइट" का संदर्भ की शुरुआत है।
अगर मैं गतिशील रूप से इस कोड (एक सेवा में) का उपयोग करके इस वर्ग के लिए संपत्ति प्रकार खोजने की कोशिश:
String entityName = "PhysicalSiteAssessment"
Class entityClass
try {
entityClass = grailsApplication.getClassForName(entityName)
} catch (Exception e) {
throw new RuntimeException("Failed to load class with name '${entityName}'", e)
}
entityClass.metaClass.getProperties().each() {
println "Property '${it.name}' is of type '${it.type}'"
}
तो नतीजा यह है कि यह जावा वर्गों पहचानता है, लेकिन नहीं Grails डोमेन वर्ग है । उत्पादन निम्नलिखित लाइनों में शामिल हैं:
Property 'site' is of type 'class java.lang.Object'
Property 'siteId' is of type 'class java.lang.Object'
Property 'sampleDate' is of type 'class java.util.Date'
Property 'rainLastWeek' is of type 'class java.lang.Boolean'
Property 'additionalNotes' is of type 'class java.lang.String'
समस्या यह है कि मैं गतिशील देखने का उपयोग करने के मिलान वस्तुओं, जैसे प्राप्त करना चाहते हैं है ऐसा एक
def targetObjects = propertyClass."findBy${idName}"(idValue)
जहां propertyClass आत्मनिरीक्षण के माध्यम से लिया गया है, idName गुण का नाम देखने के लिए (जरूरी नहीं डेटाबेस आईडी) और idValue खोजने के लिए मूल्य है।
यह सभी समाप्त हो जाती है:
org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingMethodException: No signature of method: static java.lang.Object.findByCode() is applicable for argument types: (java.lang.String) values: [T04]
वहाँ संपत्ति के लिए वास्तविक डोमेन वर्ग को खोजने के लिए एक तरीका है? या हो सकता है कि किसी डोमेन क्लास का उदाहरण ढूंढने की समस्या का कोई अन्य समाधान जिसका प्रकार नहीं दिया गया है (केवल एक संपत्ति का नाम जिसमें प्रकार है)?
यह काम करता है अगर मैं इस सम्मेलन का उपयोग करता हूं कि प्रकार का नाम संपत्ति नाम पूंजीकृत ("साइट" -> "साइट") है, तो grails के माध्यम से कक्षा को देखने के लिए आवेदन उदाहरण, लेकिन मैं इससे बचना चाहता हूं।
धन्यवाद, यह काम करता है। क्या इस एपीआई का कहीं कुछ अवलोकन है? मैं ऐसा कुछ ढूंढ रहा था लेकिन उसे नहीं मिला। –
कोई भी अच्छा संदर्भ नहीं है जिसे मैंने कभी भी javadocs (http://grails.org/doc/1.1/api/org/codehaus/groovy/grails/commons/DefaultGrailsApplication.html) के अलावा देखा है। मैं Grails Sourcecode को बहुत उपयोगी देख रहा हूं। मैं डोमेन ऑब्जेक्ट बाधाओं का निरीक्षण करने के लिए बिल्ड-टेस्ट-डेटा प्लगइन में इस प्रकार की सामग्री का भी भारी उपयोग करता हूं और यदि आप उदाहरणों की तलाश में हैं तो बाधाओं को पारित करने वाली टेस्ट ऑब्जेक्ट्स स्वचालित रूप से उत्पन्न करें (http://bitbucket.org/tednaleid/grails- परीक्षण डाटा/wiki/गृह)। –
मैं इसके बजाय 'getDomainClass' को कॉल कर रहा हूं। 'grailsAplication.getDomainClass (PhysicalSiteAssessment) .getPropertyByName ('site')। टाइप करें –