【问题标题】:JPA SQL select and sum from entity managerJPA SQL 从实体管理器中选择和求和
【发布时间】:2013-12-10 00:28:51
【问题描述】:

以下 SQL 脚本在 mysql 中有效:

select 
    LOGGING_ID,
    SUM(NORMAL_HOURS +OVERTIME_HOURS +DOUBLE_TIME_HOURS) AS TOTAL_HOURS
FROM
    LOGGING_DETAIL
GROUP BY 1

我将如何与我的实体经理一起执行此操作?:

@PersistenceContext
    private EntityManager database;

    List<loggingDetail> loggingDetail = new ArrayList<loggingDetail>();
    timeLoggingDetail = database.createQuery("").getResultList();

最后我想要 Logging_id 和该 ID 的总小时数。 谢谢

【问题讨论】:

    标签: mysql sql jpa entity


    【解决方案1】:

    实体管理器可以调用您在 jpa 实体对象上设置的命名查询。我假设在这种情况下你有一个实体对象。我想如果你没有那个对象,你可以在查询中做到这一点,就像你在问题中列出的那样。我喜欢将它放在实体对象中,但其他调用可以重用它。

    实体对象 -

     @Entity
     @NamedQuery( name = "loggingDetail.getLoggingId", query = "select 
    LOGGING_ID,SUM(NORMAL_HOURS +OVERTIME_HOURS +DOUBLE_TIME_HOURS) AS TOTAL_HOURS
     FROM LOGGING_DETAIL GROUP BY 1" )
    public class LoggingDetail
    { ...}
    

    实体管理器调用不会得到一个完全填充的 loggingDetail 对象,因为查询没有返回一个完整的对象,所以你必须循环一个对象数组 -

    @PersistenceContext
    private EntityManager database;
    Query query = database.createNamedQuery( "loggingDetail.getLoggingId" );
    List<Object[]> obj = query.getResultList();
        for( Object[] objects : obj )
        {
          String logId = (String) objects[0] ;
          String logTime = (String) objects[1] ;
         }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 1970-01-01
      • 1970-01-01
      • 2015-06-22
      • 2014-09-06
      • 2011-08-27
      相关资源
      最近更新 更多