gpt4 book ai didi

java - 使用 Ebean 查询原始 SQL 时如何映射结果

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:25:51 26 4
gpt4 key购买 nike

使用 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 执行查询。和埃比恩?如何将此查询映射到可迭代对象?我是否需要创建一个包含查询中所有字段的模型类,或者我可以使用某种 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();

关于java - 使用 Ebean 查询原始 SQL 时如何映射结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25930119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com