【问题标题】:There are a @Formula-like annotation to set calculated field from subquery in JPA (EclipseLink)?有一个类似@Formula 的注释可以从 JPA(EclipseLink)中的子查询中设置计算字段?
【发布时间】:2012-08-14 09:25:18
【问题描述】:

我是一个非常新的 JPA 用户。

我想知道如何根据计算的子查询值设置字段,例如:

@[Annotation]("select count(*) from ...") 
long calculatedField;

这可能吗?

提前致谢。

【问题讨论】:

    标签: java sql jpa eclipselink


    【解决方案1】:

    你所说的没有JPA注释。但是您可以根据需要创建自己的注释并在实体中使用自己的注释。请参阅 this example 在 JPA 中创建和使用自定义注解。

    【讨论】:

      【解决方案2】:

      我尝试用 http://wiki.eclipse.org/EclipseLink/Examples/JPA/MappingSelectionCriteria 做类似你的事情

      关于将 sql 直接放在方法内的列映射中的事情 public void customize(ClassDescriptor 描述符) 抛出异常;

      当实验失败(文档很差)时,我检查了这个:

      private BigDecimal quantityOrders;
      
      @Column(name="(select 2 from dual) as quantityOrders",insertable = false, updatable = false)
      public BigDecimal getQuantityOrders() {
          return quantityOrders;
      }
      

      ...而且,它正在工作!!!

      然后我放了更复杂的选择,它也可以工作。 我找不到任何文档。

      【讨论】:

      • 有趣的解决方案,但您将无法在 JPQL where 和 having 子句中使用 quantityOrders。 JPQL "select e from Entity e where e.quantityOrders=value" 将生成 SQL "select (select 2 from dual) as quantityOrders, ... where t1.(select 2 from dual) as quantityOrders = value"
      • 是的,你说得对,但这只是替代休眠注释公式。此外,当您想为具有该定义列的实体使用别名(使用 CriteriaBuilder)时,将会出现问题。在注释公式中,可以使用单词“this”来指向当前表格。也许我们可以使用元数据定制器,但我仍然不知道如何。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-26
      • 2020-07-09
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多