Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在使用Ebean查询原始SQL时映射结果_Java_Sql_Postgresql_Ebean - Fatal编程技术网

Java 如何在使用Ebean查询原始SQL时映射结果

Java 如何在使用Ebean查询原始SQL时映射结果,java,sql,postgresql,ebean,Java,Sql,Postgresql,Ebean,使用Ebean创建的Postgres表,我想用手写语句查询这些表: SELECT r.name, r.value, p.name as param1, a.name as att1, p2.name as param2, a2.name as att2 FROM compatibility c JOIN attribute a ON c.att1_id = a.id JOIN attribute a2 ON c.att2_id

使用Ebean创建的Postgres表,我想用手写语句查询这些表:

SELECT r.name,
       r.value,
       p.name as param1,
       a.name as att1,
       p2.name as param2,
       a2.name as att2
FROM compatibility c
JOIN attribute a ON c.att1_id = a.id
JOIN attribute a2 ON c.att2_id = a2.id
JOIN PARAMETER p ON a.parameter_id = p.id
JOIN PARAMETER p2 ON a2.parameter_id = p2.id
JOIN rating r ON c.rating_id = r.id
WHERE p.problem_id = %d
  OR p2.problem_id = %d
每个连接的表表示我的一个模型类。 查询执行得很好,但我不知道如何继续:

如何使用Play 2.2执行查询。埃宾呢? 如何将此查询映射到iterable对象?我需要创建一个包含查询中所有字段的模型类,还是可以使用某种HashMap?
如何以安全的方式参数化查询?

要执行此查询,需要使用RawSql类。您还必须创建结果将被强制转换到的类

以下是示例性结果类的代码:

import javax.persistence.Entity;    
import com.avaje.ebean.annotation.Sql;  

@Entity  
@Sql  
public class Result {  

    String name;  
    Integer value;  
    String param1;
    String param2;
    String att1;
    String att2;
} 
以及执行此查询的示例:

String sql   
    = " SELECT r.name,"
    + " r.value,"
    + " p.name as param1,"
    + " a.name as att1,"
    + " p2.name as param2,"
    + " a2.name as att2"
    + " FROM compatibility c"
    + " JOIN attribute a ON c.att1_id = a.id"
    + " JOIN attribute a2 ON c.att2_id = a2.id"
    + " JOIN PARAMETER p ON a.parameter_id = p.id"
    + " JOIN PARAMETER p2 ON a2.parameter_id = p2.id"
   + " JOIN rating r ON c.rating_id = r.id"
    + " WHERE p.problem_id = %d"
    + "   OR p2.problem_id = %d"

RawSql rawSql =   
    RawSqlBuilder  
        .parse(sql)  
        .columnMapping("r.name",  "name")  
        .columnMapping("r.value", "value")  
        .create();   

Query<Result> query = Ebean.find(Result.class);  
query.setRawSql(rawSql)
    .where().gt("amount", 10);     

List<Result> list = query.findList();   
stringsql
=“选择r.name,”
+r.价值
+p.name作为参数1
+“a.名称作为附件1,”
+p2.name作为参数2
+“a2.名称作为附件2”
+“来自兼容c”
+“在c.att1_id=a.id上连接属性a”
+“在c.att2_id=a2.id上连接属性a2”
+“在a.PARAMETER_id=p.id上连接参数p”
+“在a2.PARAMETER_id=p2.id上连接参数p2”
+“在c.rating_id=r.id上加入评级r”
+“其中p.problem\u id=%d”
+“或p2。问题\u id=%d”
RawSql RawSql=
RawSqlBuilder
.parse(sql)
.columnMapping(“r.name”、“name”)
.columnMapping(“r.value”、“value”)
.create();
Query=Ebean.find(Result.class);
query.setRawSql(rawSql)
.where().gt(“金额”,10);
List=query.findList();

您可以对实体bean使用自己的sql查询,而无需创建RawSql类。请参阅此链接-