@Entity
@Table(name="T_BILL_ACCT_ITEM")
@NamedQuery(name="TBillAcctItem.findAll", query="SELECT t FROM TBillAcctItem t")
public class TBillAcctItem implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="ACCT_ITEM_ID")
private long acctItemId; @Column(name="ACCT_ID")
private long acctId; @Column(name="BILLING_CYCLE_ID")
private String billingCycleId; @Column(name="PRODUCT_ID")
private String productId; @Column(name="SERVICE_ID")
private String serviceId; @Column(name="ACCT_ITEM_CODE")
private String acctItemCode; @Column(name="ORIGINAL_AMOUNT")
private int originalAmount; @Column(name="CDR_DISCOUNT")
private int cdrDiscount; @Column(name="ACCT_DISCOUNT")
private int acctDiscount; @Column(name="RECE_AMOUNT")
private int receAmount; @Column(name="REAL_AMOUNT")
private int realAmount; @Column(name="CHARGE_OFF_SOURCE")
private int chargeOffSource; @Column(name="STATE")
private int state;
但是我现在需要查询出来的信息是这样的一个pojo类:(因为int类型的值不能为空,所以我需要将字段定义为 java.long.Integer类型)
public class ProductBillInfo implements Serializable{ private static final long serialVersionUID = 1L;
private String productId;//产品标识
private String serverId;//服务标示
private Integer realAmount;//实收金额(sum求和)
private Integer receAmount;//应收金额(sum求和)
private int state;//账目状态
private String billingCycle;//账期(月)
因为hibernate要查询的对象是要和表结构一一映射的,现在求和字段这些个是映射不了的, 之前的方法就有问题了。 找了很多看了hibernate的API 找到这个东西。 如下:
StringBuffer b = new StringBuffer();
//... 省略SQL拼接代码
String sql = b.toString();
SQLQuery query = session.createSQLQuery(sql);
query.addScalar("productId", StandardBasicTypes.STRING);//要查询出来的字段、类型
List<ProductBillInfo> lnfo =query.list();
下面是我用到的查询pojo的方法中的实现:
@SuppressWarnings("unchecked")
public List<ProductBillInfo> findByAcctIdAndCycle1(long acctId,
String cycleBegin, String cycleEnd, int state){ List<String> cycles = DateUtil.getAllCycle(cycleBegin, cycleEnd);
StringBuffer buf = new StringBuffer();
buf.append("select t.PRODUCT_ID as productId , t.SERVICE_ID as serviceId ," +
"sum(t.REAL_AMOUNT) as realAmount ,sum(t.RECE_AMOUNT) as receAmount ," +
"t.STATE as state ,t.BILLING_CYCLE_ID as billingCycleId " +
" from T_BILL_ACCT_ITEM t where t.STATE= '" + state + "' AND t.ACCT_ID='" + acctId + "' AND t.BILLING_CYCLE_ID in (");
StringBuffer bf = new StringBuffer();
for(String id : cycles){
if(bf.toString().equals("")){
bf.append("'"+id+"'");
} else{
bf.append(","+"'"+id+"'");
}
}
buf.append(bf.toString());
buf.append(") GROUP BY t.PRODUCT_ID,t.BILLING_CYCLE_ID,t.SERVICE_ID"); SQLQuery query = getSession().createSQLQuery(buf.toString());
query.addScalar("productId", StandardBasicTypes.STRING);
query.addScalar("serviceId", StandardBasicTypes.STRING);
query.addScalar("realAmount", StandardBasicTypes.INTEGER);
query.addScalar("receAmount", StandardBasicTypes.INTEGER);
query.addScalar("state", StandardBasicTypes.INTEGER);
query.addScalar("billingCycleId", StandardBasicTypes.STRING); query.setResultTransformer(Transformers.aliasToBean(ProductBillInfo.class));
List<ProductBillInfo> lnfo =query.list();
return lnfo;
}
注:示例中addScalar及setResultTransformer很关键,我在使用的时候还报了一个错(原因是在实体中需要有一个无参构造函数),否则错误如下:
org.hibernate.HibernateException: Could not instantiate resultclass:com.eastelsoft.framework.formbean.interfaceBean.ProductBillInfo
public static void main(String[] args) {
List<String> c = new ArrayList<String>();
c.add("1");c.add("2");c.add("3");
StringBuffer bf = new StringBuffer();
for(String id : c){
if(bf.toString().equals("")){
bf.append("'"+id+"'");
} else{
bf.append(","+"'"+id+"'");
}
}
System.out.println(bf.toString());
}
打印结果是: '1','2','3'
hibernate使用setResultTransformer()将SQL查询结果放入集合中的更多相关文章
-
在查询时将查询条件放入Session中,导出时直接根据qpniRGaFiler取查询条件即可
在查询时将查询条件放入Session中,导出时直接根据qpniRGaFiler取查询条件即可
-
java集合-把商品放入集合中调用(新手)
//创建的一个包名. package qige; //导入的一个包.import java.util.*; //定义一个类.public class Ipcs { //公共静态的主方法. public ...
-
java通过文件路径读取该路径下的所有文件并将其放入list中
java通过文件路径读取该路径下的所有文件并将其放入list中 java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中.假设指定路径为path,目标集合为fileList,遍 ...
-
用SQL查询方式显示GROUP BY中的TOP解决方法[转]
用SQL查询方式显示GROUP BY中的TOP怎样用一个SQL语句来显示 分组后每个组的前几位 比如把一个学校所有学生的成绩按班级分组,再显示每个班级前五名的信息. 班级 学生 成绩 一班 ...
-
tuple放入dict中
tuple放入dict中是否可以正常运行 # 将tuple放入dict中 a = ('AI','Kobe','Yao') b = ('AI',['Kobe','Yao']) dict1 = {'a': ...
-
用MT.exe将exe中的manifest文件提取出来和将manifest文件放入exe中
前一种方法是将manifest文件放入exe中,但是要记得需要在工程中设置 这样的话exe中就不存在manifest了,在debug目录下就会看到相应的manifest文件.后者是将exe中的man ...
-
pyqt字符串分离开,放入列表中
string1 = ''''' the stirng Has many line In THE fIle ''' list_of_string = string1.split() print list ...
-
.Net中把图片等文件放入DLL中,并在程序中引用
原文:.Net中把图片等文件放入DLL中,并在程序中引用 [摘要] 有时我们需要隐藏程序中的一些资源,比如游戏,过关后才能看到图片,那么图片就必须隐藏起来,否则不用玩这个游戏就可以看到你的图片了,呵呵 ...
-
MyBatis 遍历数组放入in中
必须要遍历出数组的值放入in中 如果直接将"'2','3','4','5','6','7','8'" 字符串放入in中,只会查出 inv_operate_type的值为2的数据,因 ...
随机推荐
-
Mono 3.2 上跑NUnit测试
NUnit是一款堪与JUnit齐名的开源的回归测试框架,供.net开发人员做单元测试之用,可以从www.nunit.org网站上免费获得,最新版本是2.5.Mono 3.2 源码安装的,在/usr/b ...
-
数据结构:链表(python版) 续:增加比较函数
题目: 基于元素相等操作"=="定义一个单链表的相等比较函数.另请基于字典序的概念,为链表定义大于,小于,大于等于,小于等于的判断 class LList: "" ...
-
C#性能优化实践
性能主要指两个方面:内存消耗和执行速度.性能优化简而言之,就是在不影响系统运行正确性的前提下,使之运行地更快,完成特定功能所需的时间更短. 本文以.NET平台下的控件产品MultiRow为例,描述C# ...
-
Jsp分页实例---真分页
网页的分页功能的实现比较简单,实现方法也多种多样. 今天总结一个简单的Jsp真分页实例. 首先,提到分页就要先明确一个概念,何为真分页何谓假分页. 假分页:一次性从数据库读出表的所有数据一次性的返回给 ...
-
create-react-app源码解读之为什么不搞个山寨版的create-react-app呢?
最近把 vue-cli@2.x 和 create-react-app 的源码都看了一遍.由于现在官方推荐使用 vue-cli@3.0 ,改动比较大,所以就不写关于 vue-cli 的了(据说是因为 v ...
-
Full Regularization Path for Sparse Principal Component Analysis
目录 背景 Notation Sparse PCA Semidefinite Relaxation Low Rank Optimization Sorting and Thresholding 背景 ...
-
[NOI2018]你的名字(68pts)
SAM真让人头秃. 题面 https://www.luogu.org/problemnew/show/P4770 首先考虑 l=1,r=∣S∣的做法 如果对于ION2018的子串不用判重的话,对ION ...
-
c语言标准输入和scanf的关系
int a scanf("%d",&a); 什么意思,是从键盘读取一个数字存放到a中.错,scanf和所有从键盘获取输入数据的函数都不是直接从键盘获取数据的,而是从“标准输 ...
-
Describe in brief Databases and SQL Server Databases Architecture.
Databases- A database is a structured collection of data.- Database can be thought as simple data fi ...
-
linux 终端分屏命令vsp(转)
比如:某文件夹下有文件:vector.cc, substr.cc 1.使用vim命令打开任意一个文件:vim vector.cc打开第一个文件.如下图所示: 2.按:"Esc"键 ...