libro
www.tuyano.com
Google App Engine for Java(GAE/J)プログラミング入門

複数モデルを連携処理する (2/6)

作成:2010-05-07 16:48
更新:2010-05-10 17:37

■関連するMsgDataをLinkDataにListで保管する

続いて、LinkDataクラスの修正を行いましょう。こちらには、関連付けられたMsgDataを保管することにします。といっても、1つのLinkDataに、いくつものMsgDataが作られる場合ももちろんあります。リレーショナルデータベースの「1対多」の関係が考えられるわけです。そこで、MsgDataをそのまま保管するのではなく、Listに保管するようにいsましょう。

下にソースコードを掲載しておきます。ここでは、msgDatasというフィールドを用意し、Listを保管するようにしてあります。が、ただフィールドを用意しているだけではないのに気がついたでしょうか。
    @Persistent(mappedBy = "linkdata")
    private List<MsgData> msgDatas;
こんな具合に、@Persistentのアノテーションに、(mappedBy = "linkdata")というのが付け足されています。これは、双方向に関連付けがされた場合の親子関係を示すためのものです。このLinkDataとMsgDataでは、ListDataに対してMsgDataが関連づけられますから、両者の関係としてはLinkDataが親になります。そこで、mappedByに"linkdata"と指定をして、LinkDataに対してMsgDataが関連付けられていることを明示しているわけです。

ここでの例のように、双方向に関連付けを行う場合には、必ずmappedByを指定して、両者の親子関係が明確となるようにしてください。これを忘れると、うまくデータの保管ができなくなります。

※プログラムリストが表示されない場合

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)プログラミング入門」に戻る