【问题标题】:Error getting BeanDescriptor for path获取路径的 BeanDescriptor 时出错
【发布时间】:2016-01-09 18:25:17
【问题描述】:

我尝试使用 Ebean ORM 从数据库中获取一些数据。我有 3 个名为 dealdeal_company_branchcompany_branch 的表。 deal_company_branch是关联实体。我写了一个查询来获取数据,

select d.* from deal d, deal_company_branch dcb where d.deal_id=dcb.dealId and dcb.branchId=3

然后我尝试使用 Ebean ORM 做同样的事情,如下所示,

DealDAO.find.fetch("deal").fetch("deal_company_branch").where()
            .and(Expr.eq("deal.deal_id", "deal_company_branch.dealId")
                    , Expr.eq("deal_company_branch.branchId", branchId)).findList();

当我执行这个时,我得到了,

错误:检索类别时出错:从 com.de.models.Deal 获取路径交易的 BeanDescriptor 时出错

我该如何解决这个问题?

【问题讨论】:

    标签: java playframework ebean


    【解决方案1】:

    所以:

    • fetch("deal_company_branch") ... 当它应该是属性名称时,它看起来像一个表名称,并且它是可选的,因此除非您真的想要获取该数据,否则最好将其省略。

    • .and(Expr.eq("deal.deal_id", "deal_company_branch.dealId") ...您应该完全忽略它

    • Expr.eq("deal_company_branch.branchId", branchId)).findList(); ... 再次看起来像 table.column 引用而不是逻辑属性路径。

    这几乎看起来像ManyToMany 关系,但你不包括你的模型。在大多数情况下,对于 ORM 查询,您应该包含您的模型对象,以便人们可以更好地理解您正在尝试做什么。

    看起来你应该这样做:

    DealDAO.find.where().eq("companies.branch.id", branchId).findList();
    

    这假设 Deal 实体有一个 @ManyToMany 到“companies”,它有一个 @ManyToOne 到“branch”,它有一个 @Id id 属性。

    Ebean 将从属性路径(“companies.branch.id”)中了解它需要进行哪些连接以支持 where 子句(以及 order by 子句和获取)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-29
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      相关资源
      最近更新 更多