複数モデルを連携処理する (2/6)
作成:2010-05-07 16:48
更新:2010-05-10 17:37
更新:2010-05-10 17:37
■関連するMsgDataをLinkDataにListで保管する
続いて、LinkDataクラスの修正を行いましょう。こちらには、関連付けられたMsgDataを保管することにします。といっても、1つのLinkDataに、いくつものMsgDataが作られる場合ももちろんあります。リレーショナルデータベースの「1対多」の関係が考えられるわけです。そこで、MsgDataをそのまま保管するのではなく、Listに保管するようにいsましょう。
下にソースコードを掲載しておきます。ここでは、msgDatasというフィールドを用意し、Listを保管するようにしてあります。が、ただフィールドを用意しているだけではないのに気がついたでしょうか。
ここでの例のように、双方向に関連付けを行う場合には、必ずmappedByを指定して、両者の親子関係が明確となるようにしてください。これを忘れると、うまくデータの保管ができなくなります。
下にソースコードを掲載しておきます。ここでは、msgDatasというフィールドを用意し、Listを保管するようにしてあります。が、ただフィールドを用意しているだけではないのに気がついたでしょうか。
@Persistent(mappedBy = "linkdata")こんな具合に、@Persistentのアノテーションに、(mappedBy = "linkdata")というのが付け足されています。これは、双方向に関連付けがされた場合の親子関係を示すためのものです。このLinkDataとMsgDataでは、ListDataに対してMsgDataが関連づけられますから、両者の関係としてはLinkDataが親になります。そこで、mappedByに"linkdata"と指定をして、LinkDataに対してMsgDataが関連付けられていることを明示しているわけです。
private List<MsgData> msgDatas;
ここでの例のように、双方向に関連付けを行う場合には、必ずmappedByを指定して、両者の親子関係が明確となるようにしてください。これを忘れると、うまくデータの保管ができなくなります。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
package jp.tuyano;
import java.util.*;
import javax.jdo.annotations.*;
import com.google.appengine.api.datastore.Key;
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class LinkData {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
@Persistent
private String title;
@Persistent
private String url;
@Persistent
private String comment;
@Persistent
private Date datetime;
@Persistent(mappedBy = "linkdata")
private List<MsgData> msgDatas;
public LinkData(String title, String url, String comment, Date datetime, List<MsgData> list) {
super();
this.title = title;
this.url = url;
this.comment = comment;
this.datetime = datetime;
this.msgDatas = list;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public Date getDatetime() {
return datetime;
}
public void setDatetime(Date datetime) {
this.datetime = datetime;
}
public List<MsgData> getMsgDatas() {
return msgDatas;
}
public void setMsgDatas(List<MsgData> msgDatas) {
this.msgDatas = msgDatas;
}
}
※関連コンテンツ
「Google App Engine for Java(GAE/J)プログラミング入門」に戻る