중복 된 경우 죄송합니다.엔티티 또는 ID가있는 JPQL @ NamedQuery?
비즈니스 계층에서 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);
}
업데이트] 질문 --------------------------------------
@EJB
으로 각각 주입 할 수있는 JAX-RS 또는 JAX-WS 클래스는 동일한 JTA에서 말할 수 있습니까?
내가 항상 궁금해하는 매우 원래의 문제가 여기에 있습니다.
두 개의 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 클라이언트로 수행하는 적절한 방법은 무엇입니까? 나는 불행하게도 완전히 "두 번째 질문을 이해 어떤 JAX-RS를 수행하지 않기 때문에
@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;
}