0 0

hibernate session.createSQLQuery(sql).executeUpdate()更新不成功5

请问大家有没有遇到过 session.createSQLQuery(sql).executeUpdate()更新不成功的情况呢,sql写的没有问题
sql="update T_OA_DOCINFO set states='1' where id in(select name from T_OA_DOC_INOUTDETAILS where inoutid='"+dto.getId()+"')"

问题补充:这个语句就是偶尔执行不成功,大部分机会还是能执行成功的
2014年7月16日 12:27

7个答案 按时间排序 按投票排序

0 0

  你的SQL在语法上没有问题,你看看你的id和name在类型上是否对应,如果没有问题,你就要看的事务机制是否配置正确,另外如果你是跑单元测试的话,数据库也不会执行修改操作。

2014年7月17日 17:31
0 0

name和id的数据类型是否一样,如果数据量较大建议别使用in,用exists试试

2014年7月17日 09:17
0 0

执行不成功指的是什么呢?记录  报错还是数据库里的数据不合理。建议把当时的场景都记录下来分析,按理说不存在偶尔的问题。数据库的靠谱我们应该信任。极有可能是数据有问题,你可以把场景数据都记录一下再分析

2014年7月16日 23:28
0 0

你这个语句本身没有语法问题。存在问题的可能是:
1、你的id和name不匹配的问题
2、你的in里面的语句查不到值。
3、你更新语句所在的事务没有提交。

2014年7月16日 16:25
0 0

你只要把sql拿到数据库里面执行下看看,
能否修改成功. 这类似的问题一般是sql错误 没有执行成功

2014年7月16日 14:04
0 0

肯定有问题啊,你的条件是id in (select...)结果你的select语句查询的name,
你该成select id  from T_OA_DOC_INOUTDETAILS where inoutid='"+dto.getId()+"')"
或者用exists

2014年7月16日 13:08
0 0

总感觉sql怪怪的

sql="update T_OA_DOCINFO set states='1' where id in(select [color=red]name[/color] from T_OA_DOC_INOUTDETAILS where inoutid='"+dto.getId()+"')"


你先在数据库里执行下这条语句看能不能成功.

2014年7月16日 12:45

相关推荐

    hibernate 执行原生sql的几种方式

    Hibernate的`Session`接口提供了`createSQLQuery()`方法,允许我们直接编写SQL语句。例如: ```java Session session = sessionFactory.openSession(); SQLQuery query = session.createSQLQuery("SELECT * FROM...

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

    在每次更新后调用`session.flush()`强制Hibernate执行当前的数据库操作,然后使用`session.evict(entity)`将实体从缓存中移除。这样做可以确保每个更新操作仅执行一次,并且避免了持久化上下文中的内存浪费。 ```...

    Hibernate批量处理数据

    3. **利用HQL或SQL进行批量更新**:对于简单的情况,可以直接使用HQL或SQL进行批量更新,这种方式不需要加载每一行数据到内存中。 ```java session.createSQLQuery("UPDATE user SET name='newName' WHERE id IN ...

    Hibernate_NSQL&HQL增删改操作

    在上述代码中,我们首先定义了一个SQL字符串,然后使用`session.createSQLQuery(sql)`创建一个NSQL查询对象,并通过`query.setString()`设置参数值。最后,调用`query.executeUpdate()`执行插入操作,并根据返回值...

    Hibernate3调用存储过程用法

    SQLQuery query = session.createSQLQuery("CALL myProcedure(:param1, :param2)"); ``` 2. **设置参数** 使用setXXX方法设置存储过程的输入或输出参数,其中XXX代表参数类型(如setString、setInteger等)。...

    1、hibernate调用存储过程1

    接下来,通过`session.createSQLQuery`创建一个SQL查询,并将存储过程的调用语句以`{call ProcedureName}`的格式传递给它。在本例中,存储过程名为`CommandAdapter`,并传入四个参数,分别通过`query.setString`和`...

    SSH笔记-管理Session和批量操作数据库

    - 使用`Session.createSQLQuery()`或`Session.createQuery()`构建HQL(Hibernate Query Language)或SQL查询,然后调用`addBatch()`添加待执行的参数,最后调用`executeUpdate()`执行批量操作。 6. **通过 ...

    hibernate存储过程

    - 使用`Session.createSQLQuery()`方法创建SQLQuery对象,然后通过`addScalar()`指定返回值类型,`executeUpdate()`或`list()`执行存储过程。 3. **调用存储过程的方法** - **简单调用**:对于无参数或只接收输入...

    hibernate调用存储过程的方法调用

    - **创建SQL查询**:使用`Session`的`createSQLQuery`方法,传入存储过程的SQL调用语句,如`CALL myProcedure(?, ?)`。 - **设置参数**:使用`setXXX`方法(根据参数类型,如`setString`, `setInteger`等)设置...

    hibernate执行外部sql

    3. **创建SQLQuery对象**:在Hibernate中,使用`Session`对象的`createSQLQuery()`方法创建`SQLQuery`对象,这个对象可以执行SQL语句。你可以传递读取到的SQL语句到这个方法。 4. **设置参数和类型**:如果SQL语句...

    hibernate调用存储过程.docx

    1. 使用`SQLQuery`对象:通过Session的`createSQLQuery`方法创建`SQLQuery`对象,然后设置存储过程的SQL语句(包括IN、OUT或INOUT参数),并调用`executeUpdate`或`list`方法执行。 ```java Session session = ...

    hibernate query调用oracle存储过程

    在Hibernate中,调用存储过程通常通过Session对象的createNativeQuery()方法实现,这个方法用于创建原生SQL查询,可以方便地调用数据库的自定义SQL或者存储过程。以下是一个简单的示例,展示了如何调用一个不带参数...

    Hibernate 课件_HQL

    - `Query query = session.createSQLQuery("SELECT * FROM users WHERE age > ?");` - `query.setInteger(0, 18);` #### 分页查询 - **定义**:通过限制查询结果的数量和偏移量来进行分页。 - **方法**: - `...

    Hibernate 修改数据的实例详解

    在这个示例中,我们直接写了一个SQL更新语句,然后通过`createSQLQuery`创建一个SQL查询对象,执行`executeUpdate`来完成更新。 3. **通过OID更新** Hibernate提供了`session.update()`方法,通过对象的主键(OID...

    hibernate调存储过程的方法.txt

    SQLQuery sqlQuery = session.createSQLQuery("{call 漤(?)}"); sqlQuery.setString(0, "String"); sqlQuery.executeUpdate(); ``` 2. **使用JDBC API**: - 获取当前会话的连接。 - 创建`CallableStatement`...

    hibernate调用存储过程[参考].pdf

    调用存储过程时,我们需要创建一个Hibernate的Session对象,然后利用Session的`createSQLQuery`方法来执行存储过程。例如,调用`getUserList`过程可以写成: ```java Session session = HibernateUtil....

    NHibernate 执行存储过程

    在配置完成后,我们可以在C#代码中通过SessionFactory获取Session对象,然后使用Session的CreateSQLQuery方法来执行存储过程: ```csharp ISession session = sessionFactory.OpenSession(); IQuery query = ...

    详解Java的Hibernate框架中的缓存与原生SQL语句的使用

    - `Session.createSQLQuery(String sql)`:创建SQL查询对象,可以执行SELECT、INSERT、UPDATE、DELETE等操作。 - 结果集映射:使用`addScalar()`或`setResultTransformer()`将SQL查询结果映射到Java对象。 - 执行...

    HQL语言大全 跳楼分值

    在Hibernate中,可以通过Session的createQuery()或createSQLQuery()方法创建HQL查询对象,然后调用executeUpdate()或list()方法执行查询并获取结果。 ### 8. 注意事项 - HQL查询的结果是对象列表,而非原始数据,...

Global site tag (gtag.js) - Google Analytics