2012-03-16 151 views
2

我從來沒有使用JPA和我想問一下是否有加入加入在遊戲框架

如果我這樣做

String queryStringGet="SELECT c.* FROM Category c "+ 

"LEFT JOIN User us ON us.id = c.id "+ 

"+"WHERE c.user_id="+id; 

List<Object[]> list = JPA.em().createNativeQuery(queryString).getResultList(); 

作品,但出來作爲一個對象,我不知道如何在視圖:(

由於play.db.jpa.Model列出並不能支持。如何做一個加入? 以及如何列出的對象?

感謝

回答

2

JPQL不支持連接。有一個explanation of how to do it here

而且你可以在列表中的結果,像這樣:

String hql = "SELECT c FROM Category c " 
      + "LEFT JOIN User us WITH us.id = c.id " 
      + "WHERE c.user_id= :userId"; 
Query query = JPA.em().createQuery(hql, Categories.class); 
query.setParameter("userId", userId); 
List<Category> categories = query.getResultList(); 
+0

這不是在玩框架工作 拋出:IllegalArgumentException發生:org.hibernate.hql.ast.QuerySyntaxException:期待IDENT,發現「*」附近的1號線,第10列[SELECT c。* FROM Category c LEFT JOIN User us WITH us.id = c.id WHERE c.user_id =:userId] – Daniel 2012-03-16 11:31:30

+0

使用'c'而不是'c。*' – maartencls 2012-03-16 18:52:23

1

由於您使用本機查詢,它會正常運行只要sql在數據庫中有效。

使用自定義查詢,此代碼將返回帶有隱式數據類型的對象數組列表。所以如果你返回的第一列是一個varchar,那麼object [0]將是一個字符串。你將不得不做映射到你的對象自己

List<Category> categories = query.getResultList(); 
    Category cat = null; 
    for (Object[] objects : categories) { 
     if (cat == null) 
      cat = new Category(); 
     cat.name = (String) objects[0]; 
     ... 
    }