使用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执行查询.和Ebean?
如何将此查询映射到可迭代对象?我是否需要创建一个包含查询中所有字段的Model类,还是可以使用某种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();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。