java - 如何针对这种情况创建 hibernate 映射?

标签 java mysql sql xml hibernate

我有以下 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());
    }

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

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

最佳答案

您还可以获得 map 的实例。例如:

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"));
}

关于java - 如何针对这种情况创建 hibernate 映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26062115/

相关文章:

mysql - 在 varchar 字段的开头按字母顺序排列带有 "The"、 "A"、 "An"等的记录

java - 为什么在我的java代码中出现异常后回滚操作没有完成

MySQL 在 if 语句中使用 create index 报告语法错误

Java ResultSet.updateRow() 抛出 MySQLSyntaxErrorException

java - 使用 JDBC 从数据库缓存数据

php - 如何使用PHP从ADORecordSet_mysql检索字段数,行数和字段名

mysql - 当我尝试使用大于聚合时出现错误代码 1064

java - 更改微调器突出显示和线条颜色

java - Jsp遍历对象列表

java - appengine - java持久性