2010-06-09 34 views
0

我正在使用netbean 6.8 btw。
假设我有4个不同的表格:Company,Facility,ProjectDocument。所以关系是这样的。一个公司可以有多个设施。一个设施可以有多个项目,一个项目可以有多个文件。JPA + EJB + JSF:如何设计复杂的查询

Company
+ companyNum:PK
+ facilityNum:FK

Facility
+ facilityNum:PK
+ projectNum:FK

Project
+ projectNum:PK
+ drawingNum:FK

所以当我在netbean 6.8中创建Entity Class From Database时,我有4个以上述4个表格命名的实体类。所以如果我想要查看数据库中的所有Document,那么很容易。在我SessionBean,我这样做:

@PersistenceContext 
private EntityManager em; 
List<Document> documents = em.createNamedQuery("Document.findAll").getResultList(); 

然而,这还不是全部我所需要的。假设我想知道来自特定Company的所有Document,或者来自特定Facility的来自具体Company的来自特定Project的所有Document。我对JPA + EJB + JSF是一个全新的新手。请帮助我。

回答

1

您的关系应使用@ManyToOne(例如在projects集合的Document)声明,然后在JPA查询中使用inner join,例如,选择所有文件对于给定的项目:

select d from Document d inner join d.projects p where p.id = ? 
+0

你认为你可以提供更多的示例代码? – 2010-06-09 21:11:26