首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将RawSql结果映射到Java Ebean中的对象

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

Stack Overflow用户
提问于 2013-06-18 21:17:44
回答 1查看 1.7K关注 0票数 5

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

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

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

有没有像myResults.mapToClass(Article.class)一样检索List<Article>之类的东西的另一种方法

这是我已经有的代码:

代码语言:javascript
复制
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();

或者:

代码语言:javascript
复制
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();
EN

回答 1

Stack Overflow用户

发布于 2016-06-13 16:53:46

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

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

摘录:

代码语言:javascript
复制
@Entity
@Sql
public class CustomerWithPurchaseStats {

    @OneToOne
    private Customer customer;
...

DAO

代码语言:javascript
复制
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();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17169921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档