【问题标题】:How do i create hibernate mappings for this situation?我如何为这种情况创建休眠映射?
【发布时间】:2014-09-26 14:36:31
【问题描述】:

我有以下 SQL 查询:

    SELECT CONNECTIONDATE AS UNLOAD, 
    SUBSTR(ROUTECODE,1,(LENGTH(ROUTECODE)-2)) AS ROUTE, 
    COUNT(SUBSTR(ROUTECODE,1,(LENGTH(ROUTECODE)-2))) AS FREQUENCY 
    FROM RouteTableSynonym RC1 
    WHERE RC1.ROUTECONNECTIONTYPE = 'INBOUND' 
    and RC1.CONNECTIONTIME >= TO_TIMESTAMP('<sdate>', 'DD-MM-YYYY HH24:MI:SS') 
    and RC1.CONNECTIONTIME <= TO_TIMESTAMP('<edate>', 'DD-MM-YYYY HH24:MI:SS') 
    and RC1.LOGISTICSPOINTID in (SELECT DISTINCT RCO1.LOGISTICSPOINTID  
    FROM RouteOrderTableSynonym RCO1 
    WHERE RCO1.NAMC = '<namc>') 
    GROUP BY CONNECTIONDATE, SUBSTR(ROUTECODE,1,(LENGTH(ROUTECODE)-2)) 
    ORDER BY CONNECTIONDATE, ROUTE;

'var_name>' 指定的所有值都替换为正在查询的值。我也有这个实体类来存储这个查询的结果:

   import java.util.Date;

   public class DD_BlackoutRouteFrequencies {

        private Date rte_day;
        private String route;
        private int freq;
        private int delayedFreq;

        public Date getRte_day() {
            return rte_day;
        }
        public void setRte_day(Date rte_day) {
            this.rte_day = rte_day;
        }
        public String getRoute() {
            return route;
        }
        public void setRoute(String route) {
            this.route = route;
        }
        public int getFreq() {
            return freq;
        }
        public void setFreq(int freq) {
            this.freq = freq;
        }
        public int getDelayedFreq() {
            return delayedFreq;
        }
        public void setDelayedFreq(int delayedFreq) {
            this.delayedFreq = delayedFreq;
        }   
    }

我这样执行查询:

    try{
        SQLQuery sqlquery = session.createSQLQuery(query);
        sqlquery.addEntity(DD_BlackoutRouteFrequencies.class);
        results = sqlquery.list();
        logger.debug(results.size());
        System.out.println("Frequnecy Results size: "+results.size());
    }catch(Exception e){
        logger.error("Exception ", e);
        throw new RuntimeException("SQL Exception getting Blackout Route Frequencies: "+ e.getMessage());
    }

我遇到的问题是我无法弄清楚如何为该实体进行休眠映射以接收该查询的结果,该查询从两个不同的表中提取其结果。

我是否必须对查询中使用的两个表进行休眠映射,然后映射实体?

【问题讨论】:

    标签: java mysql sql xml hibernate


    【解决方案1】:

    您还可以获取地图的实例。例如:

    SQLQuery sqlQuery = session.createSQLQuery(sql);
    
    // positional parameters (using ?)
    sqlQuery.setString(0, sdate);
    sqlQuery.setString(1, edate);
    sqlQuery.setString(2, namc);
    
    // scalar values for each column
    sqlQuery.addScalar("UNLOAD", Hibernate.STRING);
    sqlQuery.addScalar("ROUTE", Hibernate.STRING);
    sqlQuery.addScalar("FREQUENCY ", Hibernate.INTEGER);
    
    sqlQuery.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);
    List<Map<String, Object>> list = sqlQuery.list();
    
    for (Map<String, Object> map : list) {
        System.out.println(map.get("UNLOAD"));
        System.out.println(map.get("ROUTE"));
        System.out.println(map.get("FREQUENCY"));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多