委員会、メンバー、および委員会とメンバー間のメンバーシップを管理するために使用される、MySQL と vaadin を使用した休止状態、春のセキュリティ、および春のセキュリティ acl プラグインを使用して、grails で基本的な Web アプリケーションを作成しています。すべての CRUD はメンバーと委員会の両方で機能しますが、CommitteeMember オブジェクトを作成すると、クラスの Member フィールドを参照して、メンバーシップに関与するメンバーに関する情報を取得するのに問題があります。ここに私のクラスがあります:
class Committee {
    String name
    String description
    String bylaws
    static hasMany = [members: CommitteeMember]
    static constraints = {
        name blank: false, nullable: false, matches: "[a-zA-Z0-9 ]*", unique: true
        description blank: false, nullable: false, matches: "[a-zA-Z0-9 ]*"
        bylaws blank: false, nullable: false, matches: "[a-zA-Z0-9 ]*"
   }
}
class Member {
    String firstName
    String middleName
    String lastName
    String address
    String phone
    static hasMany = [committees: CommitteeMember]
    static constraints = {
        firstName blank: false, nullable: false, matches: "[a-zA-Z]*"
        middleName blank: false, nullable: false, matches: "[a-zA-Z]*"
        lastName blank: false, nullable: false, matches: "[a-zA-Z]*"
        address blank: false, nullable: false, matches: "[0-9a-zA-Z ]*"
        phone blank: false, nullable: false, minSize: 10, maxSize: 10, matches: "[0-9]*"
    }
}
class CommitteeMember {
    Member member
    Committee committee
    Date startDate
    Date endDate
    String title
    Date created = new Date()
    Date updated = new Date()
    static constraints = {
        startDate blank: false, nullable: false, format: 'mm/dd/yyyy'
        endDate blank: false, nullable: false, format: 'mm/dd/yyyy'
        title blank: false, nullable: false, matches: "[a-zA-Z0-9 ]*"
        created blank: false, nullable: false, editable: false, display: false
        updated blank: false, nullable: false, editable: false, display: false
    }
}
そして、これらのクラスを追加するサービス層のメソッド:
@Transactional
def saveCommittee(name, desc, bylaws) {
    new Committee(name: name, description: desc, bylaws: bylaws).save(flush: true);
}
@Transactional
def saveMember(fname, mname, lname, address, phone) {
    new Member(firstName: fname, middleName: mname, lastName: lname,
                 address: address, phone: phone).save(flush: true);
}
@Transactional
def saveCommitteeMember(cname, lname, fname, title, start, end) {
    def cmem = new CommitteeMember(title: title, startDate: start, endDate: end);
    cmem.member = Member.findByLastNameAndFirstName(lname, fname);
    cmem.committee = Committee.findByName(cname);
    cmem.save(flush: true);
}
これらのクラスの作成は機能し、データベースに保存されます。私の update メソッドと delete メソッドは、メンバーと委員会にとって非常に効果的です。しかし、私が何かしようとすると
//this works
def cm = CommitteeMember.get(1);
def title = cm.title;
//this does not
def firstName = cm.member.firstName;
委員会メンバーが参照するメンバーのどのフィールドにもアクセスできません。ここで何が間違っていますか?私は多くの研究を行ってきましたが、これとまったく同じものを見つけることができません。助けていただければ幸いです。この事の上に私の髪を引っ張る..
**アップデート
サービス層のメソッドsaveCommitteeMember()に行を追加しprintln(cmem.member.firstName);、grails を起動しているターミナルで、関数を呼び出したときに委員会に追加したメンバーの名前を実際に出力します。