委員会、メンバー、および委員会とメンバー間のメンバーシップを管理するために使用される、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 を起動しているターミナルで、関数を呼び出したときに委員会に追加したメンバーの名前を実際に出力します。