重複していたらごめんなさい。
ビジネス層で ID の代わりにオブジェクトを使用することは可能ですか、または推奨されますか?
SELECT c
FROM Child AS c
WHERE c.parent = :parent
public List<Child> list(final Parent parent) {
// does parent must be managed?
// how can I know that?
// have parent even been persisted?
return em.createNamedQuery(...).
setParameter("parent", parent);
}
これが私が働く方法です。
SELECT c
FROM Child AS c
WHERE c.parent.id = :parent_id
public List<Child> list(final Parent parent) {
// wait! parent.id could be null!
// it may haven't been persisted yet!
return list(parent.getId());
}
public List<Child> list(final long parentId) {
return em.createNamedQuery(...).
setParameter("parent_id", parentId);
}
更新された質問 --------------------------------------
それぞれに注入できる JAX-RS または JAX-WS クラス@EJB
は、同じ JTA で言うことができますか?
ここで、私がいつも気になっている非常に独創的な問題が発生します。
2 つの EJB があるとします。
@Stateless
class ParentBean {
public Parent find(...) {
}
}
@Stateless
class ChildBean {
public List<Child> list(final Parent parent) {
}
public List<Child> list(final long parentId) {
}
}
EJB クライアントを処理する適切な方法は何ですか?
@Stateless // <<-- This is mandatory for being injected with @EJB, right?
@Path("/parents/{parent_id: \\d+}/children")
class ChildsResource {
@GET
@Path
public Response list(@PathParam("parent_id") final long parentId) {
// do i just have to stick to this approach?
final List<Child> children1 = childBean.list(parentId);
// is this parent managed?
// is it ok to pass to other EJB?
final Parent parent = parentBean.find(parentId);
// is this gonna work?
final List<Child> children2 = childBean.list(parent);
...
}
@EJB
private ParentBean parentBean;
@EJB
private ChildBean childBean;
}