2016-04-03 9 views
0

VersuchGrails isAttached() und attach()

if(!musician.style.isAttached()){ 
    musician.style.attach(); 
} 

Der Code-Register zu verwenden, die falsche isAttached kehrt zurück. jedoch, wenn es versucht (zu befestigen) es gibt mir eine Fehlermeldung,

"object with the same identifier value was already associated with the session" 

Helfen Sie mir zu verstehen. Wenn der Bezeichner bereits mit der Sitzung verknüpft ist, warum gibt er für isAttached() nicht an die Sitzung TRUE zurück?

Antwort

1

Ich hatte dieses Problem auch, wo die Theorie während der Laufzeit nicht wie erwartet geliefert wurde. Meine Lösung war etwas wie musician.style = Style.get(styleId), wo Sie Ihre styleId von Ihrem params oder wo Sie irgendwo in Erinnerung haben. Dies funktioniert natürlich korrekt, aber es ist ein Datenbank/Cache-Aufruf, der innerhalb einer Schleife schlecht ist.

+0

Dies ist die weniger als ideale Lösung, mit der ich auch ging. – user2782001

2

aktualisieren: Ich denke, mohsenmadi ‚s Antwort am ehesten zu Ihrer Frage - ich verpasst hatte, dass style Objekt eine zugehörige Domäne ist.

Es ist schwer, genau zu sein, ohne mehr von Ihrem Code zu sehen, aber meine Vermutung ist, dass Sie mit der gleichen Kennung doppelte Objekte haben können, von denen eine an der Sitzung gebunden ist und man nicht (mit Deshalb isAttached() Zurückkehren falsch). Ich habe gesehen, dass dies passiert, wenn man viel manuelle Session-Verwaltung durchführt (zB Batch-Verarbeitung implementiert).

+0

Danke für den Tipp. Ich konnte noch kein Duplikat in der Anwendung finden, daher habe ich Mohsenmadis Lösung als Patch für den Moment verwendet. – user2782001

+0

Si gibt es eine Möglichkeit, Duplikate zu sehen (eine angehängt und eine nicht) und sie zu entfernen? – user2782001