Je voudrais faire un peu de travail quand un nouvel objet est ajouté à un domaine avec une relation hasMany.Grails Overriding domain.addTo
comme par exemple, pour un Person hasMany Hobby
faire un travail dans l'intercepteur pour addToHobby()
et removeFromHobby()
comme suit:
class Person {
String name
boolean likesFishing
static hasMany = [hobby: Hobby]
addToHobby(Hobby h) {
super.addToHobby(h) //*throws missingMethod exception
if (h.name="Fishing") {this.likesFishing=true;}
}
removeFromHobby(Hobby h) {
super removeFromHobby(h)
if (h.name="Fishing") {this.likesFishing=false;}
}
}
Pour une raison quelconque une erreur est renvoyée que je suppose que a quelque chose à voir avec un travail magique étant fait par Gorm qui n'est pas fait quand la méthode est surchargée. En tout cas autour de ça? Je peux mettre ce genre de chose dans beforeUpdate ou quelque chose comme ça, mais c'est beaucoup plus général et je vais prendre toutes les mises à jour, pas seulement un ajout ou un retrait de la liste. Notez que l'erreur levée n'est pas l'exception de pointeur nul mentionnée dans le post sur ce sujet il y a 7 ans (apparemment provoqué par faiilure pour initialiser l'ensemble), mais plutôt une exception InvocationTargetException empêchant la super méthode d'être appelée.
No signature of method: testapp.Person.addToHobby() is applicable for argument types: (testapp.Hobby) values: [testapp.Hobby : (unsaved)]
Possible solutions: addToHobby(testapp.Hobby), addToHobby(java.lang.Object), getHobby(). Stacktrace follows:
java.lang.reflect.InvocationTargetException: null
at org.grails.core.DefaultGrailsControllerClass$ReflectionInvoker.invoke(DefaultGrailsControllerClass.java:210)
at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:187)
at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
double possible de [? Comment remplacer addTo \ * et RemoveFrom \ * méthodes GORM/Grails] (ht tp: //stackoverflow.com/questions/1461857/how-to-override-addto-and-removefrom-gorm-grails-methods) – Gregg
Ne le pense pas. Cette question n'a pas invoqué le super de la méthode addTo. – user1023110
Exactement, parce que vous ne pouvez pas. Content que tu aies la réponse. – Gregg