`

hibernate调用sql加as

 
阅读更多

问题:

程序使用hibernate调用sql语句,发现不加as时结果A表的code和B表的code内容一致。

加了as之后现象消失

//代码片段
final int PAGE_NUMBER = 300;
			int size = itemIds.size();
			int j = MyUtils.getSize(size,PAGE_NUMBER);  
			for(int k = 0; k < j ; k++){
				int toIdnex = MyUtils.getIndex(k,size,PAGE_NUMBER);
				List<Object> ret = MyUtils.getList(itemIds, k, toIdnex,PAGE_NUMBER);
				//bcFristSj-no2
				sql = "select v1.item_id as p0,"+
						" v1.boxtype1_id as p1,v1.first_package_box_quty as p2,"+//--一级包装
						" v1.box_material_id1 as p3,v1.box_material_quantity1 as p4,"+//--包材1
						" v1.box_material_id2 as p5,v1.box_material_quantity2 as p6,"+//--包材2
						" v1.box_material_id3 as p7,v1.box_material_quantity3 as p8,"+//--包材3
						" v1.box_material_id4 as p9,v1.box_material_quantity4 as p10,"+//--包材4
						" v1.box_material_id5 as p11,v1.box_material_quantity5 as p12,"+//--包材5
						" v1.box_material_id6 as p13,v1.box_material_quantity6 as p14,"+//--包材6
						" v1.box_material_id7 as p15,v1.box_material_quantity7 as p16,"+//--包材7
						" v1.min_split_quty as p17,"+//--最小拆分量
						" v1.boxtype2_id as p18,"+//--二级包装
						" v2.code as p19,"+//一级包装code
						" v3.code as p20"+
						" from wms_item_to_customer v1"+
						" left join wms_box_type v2 on v2.id = v1.boxtype1_id"+
						" left join wms_item v3 on v3.id = v1.item_id"+
						" where v1.item_id in("+StringUtils.substringBetween(ret.toString(), "[", "]")+")"+
						" and v1.customer_id = ?"+
						" and v1.status = 'ENABLED'";
				query = session.createSQLQuery(sql);
				query.setLong(0, customerOrder.getCustomer().getId());
				List<Object[]> listItemToCustomer = query.list();
				//NO5:对客户物料关系查询结果进行匹配,获取所需一级包装和相应包材量
				Map<Long,Double> box2 = new HashMap<Long,Double>();
				for(Object[] obj : listItemToCustomer){
					Long itemId = Long.parseLong(obj[0].toString());
                                  //..........................

 DEGUB模式进入后发现数据如下

[207632, 201966, 120, 200848, 1, null, 0, null, 0, null, 0, null, 0, null, 0, null, 0, 120, 201966, SGMSB111, SGMSB111]

而实际结果应该是

[207632, 201966, 120, 200848, 1, null, 0, null, 0, null, 0, null, 0, null, 0, null, 0, 120, 201966, SGMSB111, 9010511]

 

分享到:
评论

相关推荐

    hibernate 调用oracle函数

    总的来说,Hibernate调用Oracle函数涉及到了数据库设计、ORM框架的使用、原生SQL查询和结果映射等多个方面,熟练掌握这些技能对于开发高质量的企业级应用至关重要。希望这篇文章能帮助你更好地理解和应用这些知识。

    Hibernate+本地SQL查询SQLQuery宣贯.pdf

    在某些情况下,开发者可能需要使用原生SQL查询来执行特定的数据库操作,这时就可以利用Hibernate的SQLQuery功能。本文将详细讲解如何使用Hibernate的SQLQuery进行本地SQL查询。 首先,创建SQLQuery实例是通过...

    hibernate调用存储过程.docx

    在文档中提到的“命名SQL查询”是Hibernate提供的一种高级查询机制,它允许在映射文件中预先定义SQL查询,然后像调用HQL(Hibernate Query Language)一样调用这些查询。这样做的好处是可以提高代码的可读性和可维护...

    Hibernate+本地SQL查询SQLQuery.pdf

    《Hibernate中的本地SQL查询SQLQuery》 在Java的持久化框架Hibernate中,有时我们需要使用原生的SQL查询来实现特定的数据库操作,这时就需要利用到SQLQuery接口。本篇文章将详细解析如何使用Hibernate的SQLQuery来...

    Hibernate存储过程的调用

    #### 三、Hibernate调用存储过程的方法 在Hibernate中调用存储过程通常有两种方式:通过`Query`接口或使用`StoredProcedureQuery`。这里我们主要介绍使用`StoredProcedureQuery`的方式,因为这种方式更适合处理复杂...

    Hibernate中大量数据的更新

    因此,在批量更新时,需要定期调用 `session.flush()` 和 `session.clear()` 来清除一级缓存。 批量抓取 Hibernate 的批量抓取机制允许将多个INSERT 语句合并成一个批量插入语句,从而提高性能。在 Hibernate 配置...

    在Java的Hibernate框架中使用SQL语句的简单介绍

    这样,你可以在代码中通过查询名称调用它,无需手动创建SQL查询: ```java Query query = session.getNamedQuery("queryTUser"); query.setParameter("name", "exampleName"); List&lt;TUser&gt; users = query.list(); `...

    Hibernate使用存储过程

    在Hibernate中调用这个存储过程,我们需要创建一个事务,获取数据库连接,然后通过CallableStatement对象执行存储过程: ```java Transaction tx = session.beginTransaction(); Connection con = session....

    Hibernate分页查询原理解读

    在这个例子中,假设当前使用的数据库为MySQL,则Hibernate内部会调用`MySQLDialect`中的方法来生成带有LIMIT关键字的SQL语句,具体实现如下: ```java public String getLimitString(String sql) { StringBuffer ...

    hibernate面试题.doc

    如果调用`delete()`方法,对象将变为瞬时态。 - **脱管态(Detached)**:对象之前是持久态,但与Session断开连接。可以通过`update()`、`saveOrUpdate()`等方法重新变为持久态。 4. Hibernate `Query`对象的使用: ...

    在Hibernate中处理批量更新和批量删除

    利用Hibernate的原生SQL查询功能,可以直接执行批量更新的SQL语句,从而显著减少数据库的I/O操作。 ```java Transaction tx = session.beginTransaction(); session.createSQLQuery("UPDATE CUSTOMERS SET AGE = ...

    hibernate中的查询方式

    HQL是Hibernate提供的面向对象的查询语言,其语法与SQL相似但并非完全相同。HQL的一个显著优势在于它具有很好的跨数据库能力,这使得开发人员可以编写一次查询逻辑而无需考虑底层数据库的具体细节。 **特点:** - ...

    Criteria hibernate

    本篇内容将聚焦于Hibernate中的Criteria查询,这是一种动态构建SQL查询的方法,无需直接编写SQL语句,非常适合在程序运行时根据条件构建查询。 在Hibernate中,Criteria API提供了一种类型安全的方式来执行查询,它...

    hibernate方言

    方言在Hibernate中起到了一个桥梁的作用,它理解特定数据库的SQL语法和特性,并将这些特性转化为标准的Hibernate API调用。这是因为不同数据库之间在SQL语法、函数支持和数据类型等方面存在差异,方言就是用来解决...

    Hibernate hql查询语法总结

    当需要遍历查询结果时,可以通过`createQuery()`方法执行HQL语句,然后调用`list()`获取结果列表: ```java Query query = session.createQuery("from Student"); List&lt;Student&gt; list = query.list(); for (Student ...

    WebWork Spring Hibernate整合开发网络书城(5)

    【标签】"Hibernate"表明这个项目主要关注的是持久层的实现,Hibernate作为一个强大的对象关系映射(ORM)框架,能够简化数据库操作,使得开发者可以使用Java对象来处理数据,而无需直接编写SQL语句。 在整合开发中...

    在Hibernate应用中处理批量更新和批量删除

    2. **使用原生SQL或存储过程**:直接使用JDBC API执行原生SQL或调用存储过程,绕过Hibernate的ORM层,可以实现更高性能的批量操作。例如,可以创建一个存储过程用于批量更新操作: ```sql CREATE OR REPLACE ...

    Hibernate商业代码汇总

    在Hibernate 2.0.3版本的`Loader`源码中,当`useLimit`标志为真时,会调用`dialect.getLimitString(sql)`来添加特定数据库的分页SQL语句前缀。这里的`dialect`对象代表了与当前数据库的交互规则,它定义了如何构造...

    hibernate批量删除

    CREATE OR REPLACE PROCEDURE batchDeleteCustomers(p_age IN NUMBER) AS BEGIN DELETE FROM CUSTOMERS WHERE AGE &gt; p_age; END; ``` 然后在Java代码中调用这个存储过程: ```java Transaction tx = session....

    hibernate分页查询 数据库连接

    HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但它是针对对象模型而不是数据库模式。例如,你可能会有如下的HQL语句: ```java String hql = "FROM Entity AS e WHERE e.property = :value"; ``` 这里的`...

Global site tag (gtag.js) - Google Analytics