2010-03-04 76 views
2

从理论上讲,此代码应设置新的锁定状态的用户,并获取写入到数据库:休眠更新将不更新任何

transaction = sess.beginTransaction(); 
String hql = "update User set locked=:newLockStatus where principalId in (:userIds)"; 
Query query = sess.createQuery(hql); 
query.setBoolean("newLockStatus", locked); 
query.setParameterList("userIds", userIdList); 
query.executeUpdate(); 
transaction.commit(); 

当我运行这段代码,我没有得到一个错误或异常或任何事情......但是当我以后读取这些用户的状态时,我发现他们的锁定状态不变。如果我直接连接到数据库,我会看到同样的情况。我理解,作为意思,我不是有一个缓存同步的问题,但真正有两种:

  • 查询
  • 在Hibernate中的一个错误的问题,使得更新没有得到体现

有谁知道?

编辑: 这里是要求日志输出(有很多噪音去除):

DEBUG org.hibernate.impl.SessionImpl - opened session at timestamp: 12676941899 
TRACE o.h.e.def.DefaultLoadEventListener - loading entity: [User#100012] 
TRACE o.h.e.def.DefaultLoadEventListener - attempting to resolve: [User#100012] 
TRACE o.h.e.def.DefaultLoadEventListener - object not resolved in any cache: [User#100012] 
TRACE o.h.p.entity.AbstractEntityPersister - Fetching entity: [User#100012] 
DEBUG org.hibernate.loader.Loader - loading entity: [User#100012] 
DEBUG org.hibernate.jdbc.AbstractBatcher - about to open PreparedStatement (open PreparedStatements: 0, globally: 0) 
DEBUG org.hibernate.jdbc.ConnectionManager - opening JDBC connection 
TRACE o.h.c.DriverManagerConnectionProvider - total checked-out connections: 0 
TRACE o.h.c.DriverManagerConnectionProvider - using pooled JDBC connection, pool size: 0 
DEBUG org.hibernate.SQL - select user0_.principalId as principa2_1_0_, user0_.displayName as displayN3_1_0_, user0_.locked as locked1_0_, user0_.XYZ as XYZ5_1_0_, user0_.ABC as ABC6_1_0_, user0_.DEF as DEF1_0_ from PRINCIPAL user0_ where user0_.principalId=? and user0_.TYPE='USER' 
Hibernate: select user0_.principalId as principa2_1_0_, user0_.displayName as displayN3_1_0_, user0_.locked as locked1_0_, user0_.XYZ as XYZ5_1_0_, user0_.ABC as ABC6_1_0_, user0_.DEF as DEF1_0_ from PRINCIPAL user0_ where user0_.principalId=? and user0_.TYPE='USER' 
TRACE org.hibernate.jdbc.AbstractBatcher - preparing statement 
TRACE org.hibernate.type.StringType - binding '100012' to parameter: 1 
DEBUG org.hibernate.jdbc.AbstractBatcher - about to open ResultSet (open ResultSets: 0, globally: 0) 
TRACE org.hibernate.loader.Loader - processing result set 
DEBUG org.hibernate.loader.Loader - result set row: 0 
DEBUG org.hibernate.loader.Loader - result row: EntityKey[User#100012] 
TRACE org.hibernate.loader.Loader - Initializing object from ResultSet: [User#100012] 
TRACE o.h.p.entity.AbstractEntityPersister - Hydrating entity: [User#100012] 
TRACE org.hibernate.type.StringType - returning 'MURALI KRISHNA PRASAD YELESWARAPU' as column: displayN3_1_0_ 
TRACE org.hibernate.type.BooleanType - returning 'false' as column: locked1_0_ 
DEBUG org.hibernate.type.EnumType - Returning 'DEF' as column DEF1_0_ 
TRACE org.hibernate.loader.Loader - done processing result set (1 rows) 
DEBUG org.hibernate.jdbc.AbstractBatcher - about to close ResultSet (open ResultSets: 1, globally: 1) 
DEBUG org.hibernate.jdbc.AbstractBatcher - about to close PreparedStatement (open PreparedStatements: 1, globally: 1) 
TRACE org.hibernate.jdbc.AbstractBatcher - closing statement 
TRACE org.hibernate.loader.Loader - total objects hydrated: 1 
DEBUG org.hibernate.engine.TwoPhaseLoad - resolving associations for [User#100012] 
TRACE o.h.engine.loading.LoadContexts - creating collection wrapper:[User.roles#100012] 
DEBUG org.hibernate.engine.TwoPhaseLoad - done materializing entity [User#100012] 
DEBUG o.h.e.StatefulPersistenceContext - initializing non-lazy collections 
DEBUG org.hibernate.loader.Loader - done entity load 
TRACE org.hibernate.jdbc.JDBCContext - after autocommit 
DEBUG org.hibernate.jdbc.ConnectionManager - aggressively releasing JDBC connection 
DEBUG org.hibernate.jdbc.ConnectionManager - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)] 
TRACE o.h.c.DriverManagerConnectionProvider - returning connection to pool, pool size: 1 
DEBUG org.hibernate.jdbc.ConnectionManager - opening JDBC connection 
TRACE o.h.c.DriverManagerConnectionProvider - total checked-out connections: 0 
TRACE o.h.c.DriverManagerConnectionProvider - using pooled JDBC connection, pool size: 0 
TRACE o.h.e.def.DefaultLoadEventListener - loading entity: [User#100000] 
TRACE o.h.e.def.DefaultLoadEventListener - attempting to resolve: [User#100000] 
TRACE o.h.e.def.DefaultLoadEventListener - object not resolved in any cache: [User#100000] 
TRACE o.h.p.entity.AbstractEntityPersister - Fetching entity: [User#100000] 
DEBUG org.hibernate.loader.Loader - loading entity: [User#100000] 
DEBUG org.hibernate.jdbc.AbstractBatcher - about to open PreparedStatement (open PreparedStatements: 0, globally: 0) 
DEBUG org.hibernate.SQL - select user0_.principalId as principa2_1_0_, user0_.displayName as displayN3_1_0_, user0_.locked as locked1_0_, user0_.XYZ as XYZ5_1_0_, user0_.ABC as ABC6_1_0_, user0_.DEF as DEF1_0_ from PRINCIPAL user0_ where user0_.principalId=? and user0_.TYPE='USER' 
Hibernate: select user0_.principalId as principa2_1_0_, user0_.displayName as displayN3_1_0_, user0_.locked as locked1_0_, user0_.XYZ as XYZ5_1_0_, user0_.ABC as ABC6_1_0_, user0_.DEF as DEF1_0_ from PRINCIPAL user0_ where user0_.principalId=? and user0_.TYPE='USER' 
TRACE org.hibernate.jdbc.AbstractBatcher - preparing statement 
TRACE org.hibernate.type.StringType - binding '100000' to parameter: 1 
DEBUG org.hibernate.jdbc.AbstractBatcher - about to open ResultSet (open ResultSets: 0, globally: 0) 
TRACE org.hibernate.loader.Loader - processing result set 
DEBUG org.hibernate.loader.Loader - result set row: 0 
DEBUG org.hibernate.loader.Loader - result row: EntityKey[User#100000] 
TRACE org.hibernate.loader.Loader - Initializing object from ResultSet: [User#100000] 
TRACE o.h.p.entity.AbstractEntityPersister - Hydrating entity: [User#100000] 
TRACE org.hibernate.type.StringType - returning 'SHAMLAL AGGARWAL' as column: displayN3_1_0_ 
TRACE org.hibernate.type.BooleanType - returning 'false' as column: locked1_0_ 
DEBUG org.hibernate.type.EnumType - Returning 'DEF' as column DEF1_0_ 
TRACE org.hibernate.loader.Loader - done processing result set (1 rows) 
DEBUG org.hibernate.jdbc.AbstractBatcher - about to close ResultSet (open ResultSets: 1, globally: 1) 
DEBUG org.hibernate.jdbc.AbstractBatcher - about to close PreparedStatement (open PreparedStatements: 1, globally: 1) 
TRACE org.hibernate.jdbc.AbstractBatcher - closing statement 
TRACE org.hibernate.loader.Loader - total objects hydrated: 1 
DEBUG org.hibernate.engine.TwoPhaseLoad - resolving associations for [User#100000] 
TRACE o.h.engine.loading.LoadContexts - creating collection wrapper:[User.roles#100000] 
DEBUG org.hibernate.engine.TwoPhaseLoad - done materializing entity [User#100000] 
DEBUG o.h.e.StatefulPersistenceContext - initializing non-lazy collections 
DEBUG org.hibernate.loader.Loader - done entity load 
TRACE org.hibernate.jdbc.JDBCContext - after autocommit 
DEBUG org.hibernate.jdbc.ConnectionManager - aggressively releasing JDBC connection 
DEBUG org.hibernate.jdbc.ConnectionManager - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)] 
TRACE o.h.c.DriverManagerConnectionProvider - returning connection to pool, pool size: 1 
DEBUG org.hibernate.jdbc.ConnectionManager - opening JDBC connection 
TRACE o.h.c.DriverManagerConnectionProvider - total checked-out connections: 0 
TRACE o.h.c.DriverManagerConnectionProvider - using pooled JDBC connection, pool size: 0 
DEBUG o.h.transaction.JDBCTransaction - begin 
DEBUG o.h.transaction.JDBCTransaction - current autocommit status: false 
TRACE org.hibernate.jdbc.JDBCContext - after transaction begin 
TRACE o.h.engine.query.QueryPlanCache - unable to locate HQL query plan in cache; generating (update User set locked = :newLockStatus where principalId in (:userIds)) 
DEBUG o.h.hql.ast.QueryTranslatorImpl - parse() - HQL: update User set locked = :newLockStatus where principalId in (:userIds) 
DEBUG org.hibernate.hql.ast.AST - --- HQL AST --- 
\-[UPDATE] 'update' 
    +-[FROM] 'FROM' 
    | \-[RANGE] 'RANGE' 
    |  \-[DOT] '.' 
    |  +-[DOT] '.' 
    |  | +-[DOT] '.' 
    |  | | +-[DOT] '.' 
    |  | | | +-[DOT] '.' 
    |  | | | | +-[DOT] '.' 
    |  | | | | | +-[IDENT] 'X' 
    |  | | | | | \-[IDENT] 'X' 
    |  | | | | \-[IDENT] 'X' 
    |  | | | \-[IDENT] 'X' 
    |  | | \-[IDENT] 'X' 
    |  | \-[IDENT] 'X' 
    |  \-[IDENT] 'User' 
    +-[SET] 'set' 
    | \-[EQ] '=' 
    |  +-[IDENT] 'locked' 
    |  \-[COLON] ':' 
    |  \-[IDENT] 'newLockStatus' 
    \-[WHERE] 'where' 
     \-[IN] 'in' 
      +-[IDENT] 'principalId' 
      \-[IN_LIST] 'inList' 
      \-[COLON] ':' 
       \-[IDENT] 'userIds' 

DEBUG org.hibernate.hql.ast.ErrorCounter - throwQueryException() : no errors 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -> statement (update [UPDATE]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---> updateStatement (update [UPDATE]) 
DEBUG o.h.hql.antlr.HqlSqlBaseWalker - update << begin [level=1, statement=update] 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----> fromClause (FROM [FROM]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------> fromElementList (RANGE [RANGE]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------> fromElement (RANGE [RANGE]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------> path (. [DOT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------------> path (. [DOT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------------> path (. [DOT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------------> path (. [DOT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------------------> path (. [DOT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------------------> path (. [DOT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------------------> path (X [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------------------------> identifier (X [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------------------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------------------- path 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------------------> identifier (X [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------------------- path 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------------------> identifier (X [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------------------- path 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------------------> identifier (X [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------------- path 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------------> identifier (X [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------------- path 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------------> identifier (X [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------------- path 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------------> identifier (User [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------- path 
DEBUG o.hibernate.hql.ast.tree.FromElement - FromClause{level=1} : User (no alias) -> user0_ 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------- fromElement 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------- fromElementList 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----- fromClause 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----> setClause (set [SET]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------> assignment (= [EQ]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------> propertyRef (locked [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------> identifier (locked [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - attempting to resolve property [locked] as a non-qualified ref 
DEBUG o.h.hql.ast.tree.FromReferenceNode - Resolved : {synthetic-alias} -> {synthetic-alias} 
TRACE o.hibernate.hql.ast.tree.FromElement - handling property dereference [User (null) -> locked (class)] 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------- propertyRef 
DEBUG org.hibernate.hql.ast.tree.DotNode - getDataType() : locked -> [email protected] 
TRACE o.h.hql.ast.tree.FromElementType - Using non-qualified column reference [locked -> ([locked])] 
DEBUG o.h.hql.ast.tree.FromReferenceNode - Resolved : {synthetic-alias}.locked -> locked 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------> newValue (: [COLON]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------> expr (: [COLON]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------------> parameter (: [COLON]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------------> identifier (newLockStatus [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------------- parameter 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------- expr 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------- newValue 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------- assignment 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----- setClause 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----> whereClause (where [WHERE]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------> logicalExpr (in [IN]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------> comparisonExpr (in [IN]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------> exprOrSubquery (principalId [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------------> expr (principalId [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------------> addrExpr (principalId [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------------> identifier (principalId [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - attempting to resolve property [principalId] as a non-qualified ref 
DEBUG o.h.hql.ast.tree.FromReferenceNode - Resolved : {synthetic-alias} -> {synthetic-alias} 
TRACE o.hibernate.hql.ast.tree.FromElement - handling property dereference [User (null) -> principalId (class)] 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------------- addrExpr 
DEBUG org.hibernate.hql.ast.tree.DotNode - getDataType() : principalId -> [email protected] 
TRACE o.h.hql.ast.tree.FromElementType - Using non-qualified column reference [principalId -> ([principalId])] 
DEBUG o.h.hql.ast.tree.FromReferenceNode - Resolved : {synthetic-alias}.principalId -> principalId 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------------- expr 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------- exprOrSubquery 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------> inRhs (inList [IN_LIST]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------------> expr (: [COLON]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------------> parameter (: [COLON]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------------> identifier (userIds [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------------- parameter 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------------- expr 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------- inRhs 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------- comparisonExpr 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------- logicalExpr 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----- whereClause 
DEBUG o.h.hql.antlr.HqlSqlBaseWalker - update : finishing up [level=1, statement=update] 
DEBUG o.h.hql.antlr.HqlSqlBaseWalker - update >> end [level=1, statement=update] 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--- updateStatement 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <- statement 
DEBUG org.hibernate.hql.ast.AST - --- SQL AST --- 
\-[UPDATE] UpdateStatement: 'update' querySpaces (PRINCIPAL) 
    +-[FROM] FromClause: 'FROM' FromClause{level=1, fromElementCounter=1, fromElements=1, fromElementByClassAlias=[], fromElementByTableAlias=[user0_], fromElementsByPath=[], collectionJoinFromElementsByPath=[], impliedElements=[]} 
    | \-[FROM_FRAGMENT] FromElement: 'PRINCIPAL' FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=null,role=null,tableName=PRINCIPAL,tableAlias=user0_,origin=null,colums={,className=User}} 
    +-[SET] SqlNode: 'set' 
    | \-[EQ] BinaryLogicOperatorNode: '=' 
    |  +-[DOT] DotNode: 'locked' 
    |  | +-[IDENT] IdentNode: '{synthetic-alias}' 
    |  | \-[IDENT] IdentNode: 'locked' 
    |  \-[NAMED_PARAM] ParameterNode: '?' {name=newLockStatus, [email protected]} 
    \-[WHERE] SqlNode: 'where' 
     \-[AND] SqlNode: '{and}' 
      +-[SQL_TOKEN] SqlFragment: 'TYPE='USER'' 
      \-[IN] InLogicOperatorNode: 'in' 
      +-[DOT] DotNode: 'principalId' 
      | +-[IDENT] IdentNode: '{synthetic-alias}' 
      | \-[IDENT] IdentNode: 'principalId' 
      \-[IN_LIST] SqlNode: 'inList' 
       \-[NAMED_PARAM] ParameterNode: '?' {name=userIds, [email protected]} 

DEBUG org.hibernate.hql.ast.ErrorCounter - throwQueryException() : no errors 
TRACE org.hibernate.hql.ast.SqlGenerator - -> statement (update [UPDATE]) 
TRACE org.hibernate.hql.ast.SqlGenerator - ---> updateStatement (update [UPDATE]) 
TRACE org.hibernate.hql.ast.SqlGenerator - -----> fromTable (PRINCIPAL [FROM_FRAGMENT]) 
TRACE org.hibernate.hql.ast.SqlGenerator - <----- fromTable 
TRACE org.hibernate.hql.ast.SqlGenerator - -----> setClause (set [SET]) 
TRACE org.hibernate.hql.ast.SqlGenerator - -------> comparisonExpr (= [EQ]) 
TRACE org.hibernate.hql.ast.SqlGenerator - ---------> binaryComparisonExpression (= [EQ]) 
TRACE org.hibernate.hql.ast.SqlGenerator - -----------> expr (locked [DOT]) 
TRACE org.hibernate.hql.ast.SqlGenerator - -------------> simpleExpr (locked [DOT]) 
TRACE org.hibernate.hql.ast.SqlGenerator - ---------------> addrExpr (locked [DOT]) 
TRACE org.hibernate.hql.ast.SqlGenerator - <--------------- addrExpr 
TRACE org.hibernate.hql.ast.SqlGenerator - <------------- simpleExpr 
TRACE org.hibernate.hql.ast.SqlGenerator - <----------- expr 
TRACE org.hibernate.hql.ast.SqlGenerator - -----------> expr (? [NAMED_PARAM]) 
TRACE org.hibernate.hql.ast.SqlGenerator - -------------> simpleExpr (? [NAMED_PARAM]) 
TRACE org.hibernate.hql.ast.SqlGenerator - ---------------> parameter (? [NAMED_PARAM]) 
TRACE org.hibernate.hql.ast.SqlGenerator - <--------------- parameter 
TRACE org.hibernate.hql.ast.SqlGenerator - <------------- simpleExpr 
TRACE org.hibernate.hql.ast.SqlGenerator - <----------- expr 
TRACE org.hibernate.hql.ast.SqlGenerator - <--------- binaryComparisonExpression 
TRACE org.hibernate.hql.ast.SqlGenerator - <------- comparisonExpr 
TRACE org.hibernate.hql.ast.SqlGenerator - <----- setClause 
TRACE org.hibernate.hql.ast.SqlGenerator - -----> whereClause (where [WHERE]) 
TRACE org.hibernate.hql.ast.SqlGenerator - -------> whereClauseExpr ({and} [AND]) 
TRACE org.hibernate.hql.ast.SqlGenerator - ---------> booleanExpr ({and} [AND]) 
TRACE org.hibernate.hql.ast.SqlGenerator - -----------> booleanOp ({and} [AND]) 
TRACE org.hibernate.hql.ast.SqlGenerator - -------------> booleanExpr (TYPE='USER' [SQL_TOKEN]) 
TRACE org.hibernate.hql.ast.SqlGenerator - <------------- booleanExpr 
TRACE org.hibernate.hql.ast.SqlGenerator - -------------> booleanExpr (in [IN]) 
TRACE org.hibernate.hql.ast.SqlGenerator - ---------------> comparisonExpr (in [IN]) 
TRACE org.hibernate.hql.ast.SqlGenerator - -----------------> exoticComparisonExpression (in [IN]) 
TRACE org.hibernate.hql.ast.SqlGenerator - -------------------> expr (principalId [DOT]) 
TRACE org.hibernate.hql.ast.SqlGenerator - ---------------------> simpleExpr (principalId [DOT]) 
TRACE org.hibernate.hql.ast.SqlGenerator - -----------------------> addrExpr (principalId [DOT]) 
TRACE org.hibernate.hql.ast.SqlGenerator - <----------------------- addrExpr 
TRACE org.hibernate.hql.ast.SqlGenerator - <--------------------- simpleExpr 
TRACE org.hibernate.hql.ast.SqlGenerator - <------------------- expr 
TRACE org.hibernate.hql.ast.SqlGenerator - -------------------> inList (inList [IN_LIST]) 
TRACE org.hibernate.hql.ast.SqlGenerator - ---------------------> simpleExprList (? [NAMED_PARAM]) 
TRACE org.hibernate.hql.ast.SqlGenerator - -----------------------> simpleExpr (? [NAMED_PARAM]) 
TRACE org.hibernate.hql.ast.SqlGenerator - -------------------------> parameter (? [NAMED_PARAM]) 
TRACE org.hibernate.hql.ast.SqlGenerator - <------------------------- parameter 
TRACE org.hibernate.hql.ast.SqlGenerator - <----------------------- simpleExpr 
TRACE org.hibernate.hql.ast.SqlGenerator - <--------------------- simpleExprList 
TRACE org.hibernate.hql.ast.SqlGenerator - <------------------- inList 
TRACE org.hibernate.hql.ast.SqlGenerator - <----------------- exoticComparisonExpression 
TRACE org.hibernate.hql.ast.SqlGenerator - <--------------- comparisonExpr 
TRACE org.hibernate.hql.ast.SqlGenerator - <------------- booleanExpr 
TRACE org.hibernate.hql.ast.SqlGenerator - <----------- booleanOp 
TRACE org.hibernate.hql.ast.SqlGenerator - <--------- booleanExpr 
TRACE org.hibernate.hql.ast.SqlGenerator - <------- whereClauseExpr 
TRACE org.hibernate.hql.ast.SqlGenerator - <----- whereClause 
TRACE org.hibernate.hql.ast.SqlGenerator - <--- updateStatement 
TRACE org.hibernate.hql.ast.SqlGenerator - <- statement 
DEBUG org.hibernate.hql.ast.ErrorCounter - throwQueryException() : no errors 
TRACE o.h.engine.query.HQLQueryPlan - HQL param location recognition took 0 mills (update User set locked = :newLockStatus where principalId in (:userIds)) 
TRACE o.h.engine.query.QueryPlanCache - unable to locate HQL query plan in cache; generating (update User set locked = :newLockStatus where principalId in (:userIds0_, :userIds1_)) 
DEBUG o.h.hql.ast.QueryTranslatorImpl - parse() - HQL: update User set locked = :newLockStatus where principalId in (:userIds0_, :userIds1_) 
DEBUG org.hibernate.hql.ast.AST - --- HQL AST --- 
\-[UPDATE] 'update' 
    +-[FROM] 'FROM' 
    | \-[RANGE] 'RANGE' 
    |  \-[DOT] '.' 
    |  +-[DOT] '.' 
    |  | +-[DOT] '.' 
    |  | | +-[DOT] '.' 
    |  | | | +-[DOT] '.' 
    |  | | | | +-[DOT] '.' 
    |  | | | | | +-[IDENT] 'X' 
    |  | | | | | \-[IDENT] 'X' 
    |  | | | | \-[IDENT] 'X' 
    |  | | | \-[IDENT] 'X' 
    |  | | \-[IDENT] 'X' 
    |  | \-[IDENT] 'X' 
    |  \-[IDENT] 'User' 
    +-[SET] 'set' 
    | \-[EQ] '=' 
    |  +-[IDENT] 'locked' 
    |  \-[COLON] ':' 
    |  \-[IDENT] 'newLockStatus' 
    \-[WHERE] 'where' 
     \-[IN] 'in' 
      +-[IDENT] 'principalId' 
      \-[IN_LIST] 'inList' 
      +-[COLON] ':' 
      | \-[IDENT] 'userIds0_' 
      \-[COLON] ':' 
       \-[IDENT] 'userIds1_' 

DEBUG org.hibernate.hql.ast.ErrorCounter - throwQueryException() : no errors 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -> statement (update [UPDATE]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---> updateStatement (update [UPDATE]) 
DEBUG o.h.hql.antlr.HqlSqlBaseWalker - update << begin [level=1, statement=update] 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----> fromClause (FROM [FROM]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------> fromElementList (RANGE [RANGE]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------> fromElement (RANGE [RANGE]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------> path (. [DOT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------------> path (. [DOT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------------> path (. [DOT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------------> path (. [DOT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------------------> path (. [DOT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------------------> path (. [DOT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------------------> path (X [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------------------------> identifier (X [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------------------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------------------- path 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------------------> identifier (X [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------------------- path 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------------------> identifier (X [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------------------- path 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------------------> identifier (X [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------------- path 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------------> identifier (X [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------------- path 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------------> identifier (X [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------------- path 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------------> identifier (User [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------- path 
DEBUG o.hibernate.hql.ast.tree.FromElement - FromClause{level=1} : User (no alias) -> user0_ 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------- fromElement 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------- fromElementList 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----- fromClause 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----> setClause (set [SET]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------> assignment (= [EQ]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------> propertyRef (locked [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------> identifier (locked [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - attempting to resolve property [locked] as a non-qualified ref 
DEBUG o.h.hql.ast.tree.FromReferenceNode - Resolved : {synthetic-alias} -> {synthetic-alias} 
TRACE o.hibernate.hql.ast.tree.FromElement - handling property dereference [User (null) -> locked (class)] 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------- propertyRef 
DEBUG org.hibernate.hql.ast.tree.DotNode - getDataType() : locked -> [email protected] 
TRACE o.h.hql.ast.tree.FromElementType - Using non-qualified column reference [locked -> ([locked])] 
DEBUG o.h.hql.ast.tree.FromReferenceNode - Resolved : {synthetic-alias}.locked -> locked 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------> newValue (: [COLON]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------> expr (: [COLON]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------------> parameter (: [COLON]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------------> identifier (newLockStatus [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------------- parameter 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------- expr 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <--------- newValue 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <------- assignment 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----- setClause 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----> whereClause (where [WHERE]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------> logicalExpr (in [IN]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------> comparisonExpr (in [IN]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------> exprOrSubquery (principalId [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -------------> expr (principalId [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - ---------------> addrExpr (principalId [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - -----------------> identifier (principalId [IDENT]) 
TRACE org.hibernate.hql.ast.HqlSqlWalker - <----------------- identifier 
TRACE org.hibernate.hql.ast.HqlSqlWalker - attempting to resolve property [principalId] as a non-qualified ref 
D 
+0

'executeUdpate()'返回了什么价值还给你已更新的实体的数量...? – skaffman 2010-03-04 08:43:38

+0

我们发送了2个用户ID,'excuteUpdate'返回2 – malaverdiere 2010-03-04 08:50:22

+0

该查询没问题,我在自己的代码中找到了几乎完全相同的东西。请在Hibernate配置文件中将hibernate.show_sql设置为true,并检查实际SQL的外观。在没有看到映射文件和用户实体的情况下很难再说更多的信息 – 2010-03-04 09:52:10

回答

1

你叫sess.flush()和sess.close()?

+0

对不起我以前的评论。我们单独尝试了'冲洗',并没有解决问题。但是'flush' +'close'这个技巧。 – malaverdiere 2010-03-04 12:05:02

0

你碰巧有一个版本列?当有一个版本列(名为X,当前值为Y)时,Hibernate会添加“SET X = Y + 1 WHERE X = Y”。这可能是您记录的原因未更新,因为它与条件不匹配。 我建议开启日志,以便您可以看到Hibernate生成的实际Update语句。

希望它有帮助。

+0

我们没有版本控制启用 – malaverdiere 2010-03-04 08:54:41