2013-06-18 8 views
5

Wie Getter und Setter für Feld eine Relation Eins-zu-viele in Grails Domain-Klasse zu überschreiben? Ich weiß, wie man Getter und Setter für Felder, die ein einzelnes Objekt sind, außer Kraft setzt, aber ich habe Probleme mit Collections. Hier ist mein Fall:Override Getter und Setter in Grails Domain-Klasse für die Relation

Ich habe Entity Domain-Klasse, die viele Titel hat. Jetzt möchte ich Getter für Titel überschreiben, um nur Titel mit Flag isActive gleich wahr zu bekommen. Ich habe etwas versucht, aber es funktioniert nicht:

class Entity { 

    static hasMany = [ 
     titles: Title 
    ] 

    public Set<Title> getTitles() { 
     if(titles == null) 
      return null 
     return titles.findAll { r -> r.isActive == true } 
    } 

    public void setTitles(Set<Title> s) { 
     titles = s 
    } 
} 

class Title { 
    Boolean isActive 

    static belongsTo = [entity:Entity] 

    static mapping = { 
     isActive column: 'is_active' 
     isActive type: 'yes_no' 
    } 
} 

Vielen Dank für Ihre Hilfe.

+0

Welchen Fehler bekommen Sie? – dmahapatro

+1

Interessiert hinter dieser Anforderung, warum nicht separate Methode dafür verwenden? Wie jetzt, wenn Sie die Fähigkeit hinzufügen müssen, alle Titel abzurufen, müssen Sie eine separate Methode schreiben, die standardmäßig unterstützt wird. –

+0

Hinweis: http://grails.1312388.n4.nabble.com/Customized-getter-td1380706.html#a1380709. Kurz gesagt, stellen Sie sicher, dass Ihre Setter und Getter den Wert nicht ändern oder Hibernate wird verwirrt. –

Antwort

4

Benötigen Sie die Referenz Set<Title> titles.

class Entity { 
    Set<Title> titles 

    static hasMany = [ 
     titles: Title 
    ] 

    public Set<Title> getTitles() { 
     if(titles == null) 
      return null; 
     return titles.findAll { r -> r.isActive == true } 
    } 

    public void setTitles(Set<Title> s) { 
     titles = s 
    } 
} 
+0

Setter sollte auch geändert werden in: öffentliche void setTitles (Set s) { titles = s; } Und dann funktioniert alles gut. – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/1793757/">kpater87</a></span> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">@ kpater87 Korrekt danke. Ich habe nur die Frage von Ihnen kopiert, um zu zeigen, was Sie eigentlich tun müssen. Aktualisiere die Frage auch. – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/2051952/">dmahapatro</a></span> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">Frage aktualisiert. Danke für die Hilfe. – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/1793757/">kpater87</a></span> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1038284119" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> <div class="clearfix"> </div> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1575177025"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img.uwenku.com/uwenku/script/side.js?t=1644592048381"></script> <script type="text/javascript" src="http://img.uwenku.com/uwenku/plugin/highlight/highlight.pack.js"></script> <link href="http://img.uwenku.com/uwenku/plugin/highlight/styles/docco.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $('pre').each(function(i, e) { hljs.highlightBlock(e, "<span class='indent'> </span>", false) }); </script> <div class="col-lg-3 col-md-4 col-sm-5"> <div id="rightTop"> <div class="row"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="5415218910" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> Letzte Frage </div> <div class="m-b-sm m-t-sm clearfix"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://de.uwenku.com/question/p-wpszapsn-cs.html" target="_blank" title="De-Referenzierung Satzelemente"> De-Referenzierung Satzelemente </a> </li> <li class="side_article_list_item"> 2. <a href="http://de.uwenku.com/question/p-zasyjqrw-cr.html" target="_blank" title="Was passiert, wenn ich deleterater nicht zum Löschen von qthread verwende?"> Was passiert, wenn ich deleterater nicht zum Löschen von qthread verwende? </a> </li> <li class="side_article_list_item"> 3. <a href="http://de.uwenku.com/question/p-xshesrbr-ck.html" target="_blank" title="Anzahl ändert sich nicht in angularjs"> Anzahl ändert sich nicht in angularjs </a> </li> <li class="side_article_list_item"> 4. <a href="http://de.uwenku.com/question/p-zqovrnwq-cg.html" target="_blank" title="PHP - siehe Objekt stdClass innerhalb des Arrays"> PHP - siehe Objekt stdClass innerhalb des Arrays </a> </li> <li class="side_article_list_item"> 5. <a href="http://de.uwenku.com/question/p-gzhvnnfb-ch.html" target="_blank" title="Docker das Verhalten bei der Montage Volumen"> Docker das Verhalten bei der Montage Volumen </a> </li> <li class="side_article_list_item"> 6. <a href="http://de.uwenku.com/question/p-xvfscegn-cb.html" target="_blank" title="Redirect Console.WriteLine() Ausgabe in String"> Redirect Console.WriteLine() Ausgabe in String </a> </li> <li class="side_article_list_item"> 7. <a href="http://de.uwenku.com/question/p-ghlhepaf-by.html" target="_blank" title="Wie konvertiert man ein (möglicherweise negatives) Pandas TimeDelta in Minuten (float)?"> Wie konvertiert man ein (möglicherweise negatives) Pandas TimeDelta in Minuten (float)? </a> </li> <li class="side_article_list_item"> 8. <a href="http://de.uwenku.com/question/p-cdsevvik-bz.html" target="_blank" title="API-Test in C# - Wie vergleiche ich die gesamte JSON-Antwort in 1 Assertion?"> API-Test in C# - Wie vergleiche ich die gesamte JSON-Antwort in 1 Assertion? </a> </li> <li class="side_article_list_item"> 9. <a href="http://de.uwenku.com/question/p-ezuvdfde-cd.html" target="_blank" title="Emacs Chrome Tastenbindungen"> Emacs Chrome Tastenbindungen </a> </li> <li class="side_article_list_item"> 10. <a href="http://de.uwenku.com/question/p-wvakwoax-ce.html" target="_blank" title="Wie wird die Codeabdeckung in Istanbul mit Angular 2 CLI eingerichtet?"> Wie wird die Codeabdeckung in Istanbul mit Angular 2 CLI eingerichtet? </a> </li> </ul> </div> </div> </div> <p class="article-nav-bar"></p> <div class="row sidebar article-nav"> <div class="row box_white visible-sm visible-md visible-lg margin-zero"> <div class="top"> <h3 class="title"><i class="glyphicon glyphicon-th-list"></i> Verwandte Themen</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item">Keine verwandten Themen^_^</li> </ul> </div> </div> </div> </div> </div> </div> </div><!-- wrap end--> <!-- footer --> <footer id="footer"> <div class="bg-simple lt"> <div class="container"> <div class="row padder-v m-t"> <div class="col-xs-8"> <ul class="list-inline"> <li><a href="http://de.uwenku.com/contact">Sprechen Sie uns an</a></li> <li>© 2020 DE.UWENKU.COM</li> <li><a target="_blank" href="https://beian.miit.gov.cn/">沪ICP备13005482号-4</a></li> <li><script type="text/javascript" src="https://v1.cnzz.com/z_stat.php?id=1280101193&web_id=1280101193"></script></li> <li><a href="http://www.uwenku.com/" target="_blank" title="优文库">简体中文</a></li> <li><a href="http://hk.uwenku.com/" target="_blank" title="優文庫">繁體中文</a></li> <li><a href="http://ru.uwenku.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.uwenku.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.uwenku.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.uwenku.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.uwenku.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.uwenku.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.uwenku.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.uwenku.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.uwenku.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.uwenku.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.uwenku.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f78a970f17b19a79fc477a3378096f29"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>