2012-03-16 114 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]; 
     ... 
    }