gpt4 book ai didi

java - 将 RawSql 结果映射到 Java Ebean 中的对象

转载 作者:搜寻专家 更新时间:2023-11-01 03:53:25 25 4
gpt4 key购买 nike

假设我有一个类 Article由 Java Ebean 自动映射为数据库表。

对于此表,我想通过 RawSql 检索条目查询,因为当涉及到具有许多连接等的复杂查询时,我发现 SQL 更简单。到目前为止,我已经设法将我的 SQL 语句提供给解析器。查询是正确的,我已经检查过了。

唯一的问题是,我不知道如何将数据库结果映射到我的 Article类(class)。我知道,有一个 columnMapping(...)方法,但老实说,我懒得手动映射每一列...

有没有其他方法可以像myResults.mapToClass(Article.class)一样检索类似 List<Article> 的内容?

这是我已有的代码:

Finder<String, Article> find = new Finder<String, Article>(
String.class, Article.class);
String sql = "SELECT * FROM article [...]";
RawSql rawSql = RawSqlBuilder.parse(sql).create();
List<Article> returnList = find.setRawSql(rawSql).findList();

或者:

Finder<String, Article> find = new Finder<String, Article>(
String.class, Article.class);
String sql = "SELECT id, title, sub_title FROM article [...]";
RawSql rawSql = RawSqlBuilder.parse(sql)
.columnMapping("id", "id")
.columnMapping("title", "title")
.columnMapping("sub_title", "subTitle")
.create();
List<Article> resultList = find.setRawSql(rawSql).findList();

最佳答案

自从提出问题以来,Ebean 发生了很多事情,但我认为问题仍然有效。新的 RawSqlBuilder.tableMapping() 使事情变得更容易,如下面的代码所示,但据我所知,它仍然需要手动映射所有属性(没有 SELECT table.* FROM table)

我确实遇到了这个问题,并通过创建一个我映射到的辅助对象 (@Entity/@Sql) 解决了这个问题。例如。 CustomerWithPurchaseStats .

摘录:

@Entity
@Sql
public class CustomerWithPurchaseStats {

@OneToOne
private Customer customer;
...

并且在 DAO :

public List<CustomerWithPurchaseStats> getAllCustomersWithPurchaseStats() {
StringBuilder sql = new StringBuilder("SELECT cu.id, <manually add all fields you need mapped ").append(" FROM customer cu ");
RawSqlBuilder rawSqlBuilder = RawSqlBuilder.parse(sql.toString());
rawSqlBuilder.tableAliasMapping("cu", "customer").create();
return Ebean.find(CustomerWithPurchaseStats.class)
.setRawSql(rawSqlBuilder.create())
.findList();
}

关于java - 将 RawSql 结果映射到 Java Ebean 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17169921/

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