複数モデルを連携処理する (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)プログラミング入門」に戻る