DataNucleus を使用して 2 つのクラスを永続化することにより、DTO オブジェクトを作成しようとしています。
作成したい DTO:
@PersistenceAware
DtoObject{
Protected String Id; //populated by Order class
Protected String status; //populated by Order class
Protected String phoneNumber; //populated by Customer class
Protected String address; //populated by Customer class
}
The Objects:
@PersistenceCapable
@FetchGroup(name="dto", members = {@Persistent(name = "Id"),
@Persistent(name="status")})
public Class Order{
@PrimaryKey
@Persistent
private String Id;
@Persistent
private String status;
@Persistent
private Customer customer;
}
@PersistenceCapable
@FechGroup(name="dto", members = { @Persistent(name = "phoneNumber"),
@Peristent(name="address") })
public Class Customer{
@PrimaryKey
@Persistent
private String Id;
@Persistent
private String phoneNumber;
@Persistent
private string Address;
}
JDODL:
Query q = pm.newQuery(Order.class);
pm.getFetchPlan().setGroup("dto");
q.setUnique(true);
q.setFilter("Id == id");
q.declareParameters("String id");
q.setResultClass(DtoObject.class);
DtoObject dto = (DtoObject)q.execute(id);
Order.class にマップされた属性を使用して dto オブジェクトを設定できますが、Customer.class から属性を取得できません。Data Nucleus はテーブルを結合し、各テーブルから適切な列を選択しますが、phoneNumber =null および address = null のままにします。
1 つのクエリでこれを機能させる方法についての指針をいただければ幸いです。