来自查询的JPA或Play Framework列表连接2个表

时间:2011-07-03 09:23:38

标签: jpa playframework

主要是我使用JSF,所以我对这个注释主题是全新的

如果有人可以提供帮助

我想从这个查询中找到一个列表

SELECT  f.CODE  ,f.NAME || '-' || e.NAME  
FROM FS.ELIGIBLE e  RIGHT
OUTER JOIN FS.FINANCIAL_SUPPORT f ON e.CODE = f.CODE ; 

上面的查询从两个表中检索一个列表并连接两个表的名称字段!!

我如何在JPA中使用Play Framework ???支持的其他查询?

2 个答案:

答案 0 :(得分:0)

阅读Play Framework documentation,特别是关于JPA and your Domain Model的部分。

您可以随时致电

来访问实体经理
EntityManager entityManager = JPA.em();

使用此功能,您可以创建所需的任何查询,甚至是“本机”查询。例如:

List<Object> results = JPA.em().createNativeQuery(
    "SELECT  f.CODE  ,f.NAME || '-' || e.NAME "+
    "FROM FS.ELIGIBLE e  RIGHT "+
    "OUTER JOIN FS.FINANCIAL_SUPPORT f ON e.CODE = f.CODE").getResultList()

答案 1 :(得分:0)

JPA不像关系数据库系统,你可以做你的查询,如连接,左连接或外连接,它是对象的映射技术。您也可以像那些RDBMS对应物一样进行相同的提取,但采用不同的方法。

你需要做的是创建一个Object然后将你的第二个Object与你的第一个Object相关联,这是关联2个或更多个对象的正确方法。我正在谈论的对象就是你的桌子。请参阅下面的示例:

  1. 表1:Items.java
  2. ...
  3. //在这里进行导入......
  4. //在这里做你的注释,如
  5. @Entity
  6. @Table(名称= “物品”)
  7. 公共类Items实现Serializable {
  8. private String id;
  9. private String itemno;
  10. 私有字符串描述;
  11. 私人套装&lt;供应商&gt;供应商; //这是第二个表(1:n关系)
  12. ...
  13. //不要忘记你的构造函数
  14. //在您的setter和供应商的getter中执行ff:
  15. @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
  16. @JoinColumn(name =“id”)
  17. public Set&lt;供应商&gt; getVendors(){
  18. 返回供应商;
  19. }
  20. public void setVendors(Set&lt; Vendors&gt;供应商){
  21. this.vendors = vendors;
  22. }
  23. ...
  24. }
  25. 表2:Vendors.java

    1. @Entity
    2. @Table(名称= “卖方”)
    3. 公共类供应商实现Serializable {
    4. private long id;
    5. 私人弦乐公司;
    6. 私人字符串联系;
    7. private String sequence;
    8. ...
    9. 公共供应商(){}
    10. ...
    11. //在你的setter&amp;吸气剂
    12. @Id
    13. public long getId(){
    14. return id;
    15. }
    16. public void setId(long id){
    17. this.id = id;
    18. }
    19. ...
    20. }
    21. 现在在查询中,只需按照ff:

      进行常规选择
      1. public void makeQuery(String seq){
      2. EntityManagerFactory emf = Persistence.createEntityManagerFactory(...);
      3. EntityManager em = emf.createEntityManager();
      4. TypedQuery&LT;物品&GT; query = em.createQuery(“ SELECT i,j.contact,j.company,j.sequence FROM Items i LEFT OUTER JOIN i.vendors j WHERE i.vendors.sequence =:seq
      5. ORDER BY i.id“,Items.class);
      6. 列表与LT;物品&GT; items = query.setParameter(“sequence”,seq).getResultList();
      7. ...
      8. }
      9. 现在,您可以使用 items.vendors.company 等来参考您的第二个表供应商。等等。

        这个的一个缺点是,JPA以Set的形式制作其相关对象,参见Table1(Items)中的声明 - 私有Set供应商。因为它是一个Set,所以序列不是按顺序接收的,与使用List不同。

        希望这会有所帮助......

        此致,Nelson Deogracias