【问题标题】:How to map Results when Querying raw SQL using Ebean使用 Ebean 查询原始 SQL 时如何映射结果
【发布时间】:2014-09-19 08:58:44
【问题描述】:

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

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 执行查询。和伊豆? 如何将此查询映射到可迭代对象?我是否需要创建一个包含查询中所有字段的模型类,还是可以使用某种 HashMap? 如何以安全的方式参数化查询?

【问题讨论】:

标签: java sql postgresql ebean


【解决方案1】:

要执行此查询,您需要使用 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();   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 2021-10-12
    • 1970-01-01
    • 2010-10-06
    • 2013-01-14
    • 2020-06-11
    • 2012-08-05
    • 2020-01-09
    相关资源
    最近更新 更多