永続性にJPAを使用するGXTプロジェクトに取り組んでいますが、双方向の関係の永続性に関する問題に直面しています。
私はそれらの2つのエンティティを持っています:
@Entity
@Table(name = "ACTV_REQ", catalog = "erpdb")
@AttributeOverride(name = "id", column = @Column(name = "ID", nullable = false, columnDefinition = "BIGINT UNSIGNED"))
@NamedQueries(value = {
@NamedQuery(name = "findByPerson", query="select object(m) from ActvReq m where m.people= :people")
})
public class ActvReq extends BaseEntity {
@ManyToOne
@JoinColumn(name = "PPL_ID")
@NotNull
private People people;
@ManyToOne
@JoinColumn(name = "ACTV_TYP_ID")
private ActivityTyp actvTyp;
@ManyToOne
@JoinColumn(name= "PPL_ACTV_RIGHT_ID")
private PeopleActvRight pplActvRight;
@Column(name = "DESCR")
private String desc;
}
と :
@Entity
@Table(name = "PPL_ACTV_RIGHT", catalog = "erpdb")
@AttributeOverride(name = "id", column = @Column(name = "ID", nullable = false, columnDefinition = "BIGINT UNSIGNED"))
@PeopleActvRightBeanConstraint
@NamedQueries(value = {
@NamedQuery(name = "findByPeople", query="select object(m) from PeopleActvRight m where m.people= :people")
})
public class PeopleActvRight extends BaseEntity {
@ManyToOne
@JoinColumn(name="ACTV_TYP_ID")
@NotNull
ActivityTyp type;
@ManyToOne
@JoinColumn(name="PPL_ID")
@NotNull
People people;
@ManyToOne
@JoinColumn(name="ACTV_RIGHT_ID")
ActvRight actvRight;
@OneToMany(mappedBy="pplActvRight",cascade=CascadeType.ALL)
private List<ActvReq> actvRequests = new ArrayList<ActvReq>();
}
(私はゲッターとセッターをコピーしませんでしたが、それらのメソッドは存在します。)
ActvReqProxyの永続性のために、それは基本的に私のEditorPresenterでそのように行われます:
getRequestContext().persistAndReturn(getModel()).with("actvTyp","people","pplActvRight").fire(new Receiver<M>() {
@Override
public void onSuccess(M response) {
unsetContext();
onSaveSuccess( response );
}
});
そして、応答pplActvRightは、私が取得した応答ではすでにnullですが、getModel()ではpplActvReqProxyが設定されています。
サーバー側では、DAOの次のメソッドを呼び出すサービスがあります。
public ActvReq persistAndReturn(ActvReq entity){
em.getTransaction().begin();
em.persist(entity);
em.close;
return entity;
}
また、メソッドwith( "pplActvRight"、 "people"、actvType ")を使用して、エディターからActvReqProxyを永続化しようとすると、エラーは発生しませんが、DBではエンティティが完全に永続化されていません。つまり、新しいActvReqがDBに作成されますが、フィールドPPL_ACTV_RIGHT_IDはnullのままです(人とactvTypで正常に機能します)
編集:実際、問題はresolveDomainValueのGWTリゾルバーにあると思いますが、属性pplActvRightを解決できません。EntityProxyオブジェクトがサーバー側に存在しないかのようです。
何か案は?