संभव डुप्लिकेट:
Hibernate: different object with the same identifier value was already associated with the sessionGrails त्रुटि "एक ही पहचानकर्ता मूल्य के साथ एक अलग वस्तु पहले से ही सत्र के साथ जुड़े थे"
मैं Grails में मेरी नियंत्रक में निम्न कोड है "a different object with the same identifier value was already associated with the session"
त्रुटि संदेश के साथ विफल रहा है। मैं पहले से ही कुछ पन्नों का दौरा किया है जहां यह कहते हैं कि मैं बुला जो सेव इस त्रुटि के साथ समाप्त होता है Provided id of the wrong type for class com.easytha.QuizTag. Expected: class java.lang.Long, got class org.hibernate.action.DelayedPostInsertIdentifier
किसी ने सुझाव दिया है कि grails खोजा प्लगइन इस कारण हो सकता है और मैं खोजा = वास्तविक रूप मेरे डोमेन को निकाल देना चाहिए इससे पहले कि "merge"
कॉल करना होगा कक्षा जो एक विकल्प नहीं है (पिछली पोस्ट देखें grails searcheable plugin search in inner hasMany class)
इंगित करने के लिए एक बात यह है कि q.save() को कॉल करने के समय त्रुटि को फेंक दिया नहीं जाता है बल्कि इसे पुनर्निर्देशित करने के दौरान फेंक दिया जाता है (कार्रवाई: " शो ", आईडी: आईडी) !!
कोई सुझाव? एक
def addTags(String tags,Long id){
if(tags){
String[] strTags = tags.split(",");
Quiz q = Quiz.get(id)
for(String t in strTags){
Tag tagToAdd = Tag.findByTag(t)
if(!tagToAdd){
tagToAdd = new Tag(tag:t)
tagToAdd.save()
}
println "---> "+tagToAdd +" Quiz"+q?.id
def qt = QuizTag.findByQuizAndTag(q,tagToAdd)
if(!qt){
qt = new QuizTag(quiz:q,tag:tagToAdd);
q.addToTags(qt)
}
}
q.save()
redirect(action:"show",id:id)
}
}
----------- संपादित ---------------
Final code that worked with searchable plugin
def addTags(String tags,Long id){
if(tags){
String[] strTags = tags.split(",");
Quiz q = Quiz.get(id)
for(String t in strTags){
if (q.tags.any { QuizTag qt -> qt.tag.tag == t }) { continue; }
Tag tagToAdd = Tag.findOrSaveByTag(t);
QuizTag qt = new QuizTag(quiz:q,tag:tagToAdd)
q.addToTags(qt)
}
q.save(flush:true)
redirect(action:"show",id:id)
}
}
:
आप की तरह कुछ की कोशिश कर सकते "। वस्तु तुरंत कायम नहीं किया जाएगा जब तक कि फ्लश तर्क प्रयोग किया जाता है" यही कारण है कि त्रुटि तब होती है जब अनुरोध समाप्त होता है। –
@TiagoFarias आप सही हैं। q.save (flush: true) को कॉल करने के बाद मुझे उस रेखा पर सही त्रुटि मिलती है, दूसरी बात यह है कि यहां ध्यान देने के बाद भी मेरा डेटा अभी भी सहेजा जा रहा है! यह त्रुटि केवल तभी होती है जब टैग पहले से मौजूद है "टैग.फिंडबीटाग (टी)" कुछ – Sap