Playframework - 查询和显示多表连接的结果

时间:2011-09-20 15:50:42

标签: jpa playframework

我是java和play框架的新手(我正在使用play 1.2.2和本地MySQL5数据库)。我正在尝试查询数据库中的几个表,并在网页上显示表连接结果。

这就是我在各个方面所拥有的:

控制器: -

public static void index() {
        List<Mutation> mutation_list= Mutation.getDisorderGene();
        render(mutation_list);       
    }

模型: -

public class Mutation extends Model {

  public static List<Mutation> getDisorderGene() {
    EntityManager entityManager = play.db.jpa.JPA.em();
    List<Mutation> muts = entityManager.createNativeQuery("select disorder_name, gene_name from Disorder,Mutation where Disorder.id = Mutation.disorder_id order by disorder_name, gene_name").getResultList();
    return muts;
  }

查看: -

#{list items:mutation_list, as:'mutation'}
                    <tr>
                        <td>${mutation.disorder_name}</td>
                        <td>${mutation.gene_name}</td>
                    </tr>
 #{/list}            

这是我收到的错误消息!

  

模板执行错误

     

模板/app/views/Stu/index.html中发生执行错误。   引发的异常是MissingPropertyException:异常评估   属性'disorder_name'for java.util.Arrays $ ArrayList,Reason:   groovy.lang.MissingPropertyException:没有这样的属性:disorder_name   for class:java.lang.String。

我不确定问题出在哪里。是JPA表连接查询还是视图中出错。

我可以在显示列的视图中做出任何更改吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

默认选择多个列的原生查询会将其返回为Object[],因此您的getDisorderGene()应返回List<Object[]>,您的模板应如下所示:

#{list items:mutation_list, as:'mutation'}
                    <tr>
                        <td>${mutation[0]}</td>
                        <td>${mutation[1]}</td>
                    </tr>
 #{/list}  

答案 1 :(得分:0)

如果你把as clausule放了......

select disorder_name as NameMyPropertyModelClass, gene_name as NameMyPropertyModelClass 
from  Disorder,Mutation 
where Disorder.id = Mutation.disorder_id order by disorder_name, gene_name