読者です 読者をやめる 読者になる 読者になる

なるほど。@Ignoreか。

ActiveObjects

なるほど。setterやgetterメソッドに@IgnoreをつけるとDBのスキーマに変換しない対象になるのか。それで代わりに実装の方でデータを保持すれば良いと。気をつけないといけないのは、DBからデータを取り直しても実装の方のフィールドの値が初期化されるわけではないと言う点。同じレコードを取得しようとした場合はキャッシュされています。前述したとおり、他のプロセスから値が書き換えられる場合は@Transientをつけるルールなので、これは別に悪いことではないです。が、ちょっとハマっていました。

import net.java.ao.Entity;
import net.java.ao.Implementation;
import net.java.ao.schema.Ignore;

@Implementation(NonPersistableFieldImpl.class)
public interface NonPersistableField extends Entity{

	@Ignore
	public void setDeleted(boolean deleted);

	@Ignore
	public boolean getDeleted();
	
	public void setName(String name);

	public String getName();

}
public class NonPersistableFieldImpl {

	private boolean deleted = false;
	
	public NonPersistableFieldImpl(NonPersistableField delegated){
		
	}
	
	public void setDeleted(boolean deleted){
		this.deleted = deleted;
	}

	public boolean getDeleted(){
		return deleted;
	}
	
}
	@Test
	public void notPersistant() throws Exception {
		NonPersistableField model = manager.create(NonPersistableField.class);
		model.setName("fool");
		model.setDeleted(true);
		model.save();
		model = manager.get(NonPersistableField.class, 1);
		assertTrue(model.getDeleted());
	}

ActiveObjectsアノテーションについてはまとめていきますかね。