Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
hibernate命名查询中出错_Hibernate - Fatal编程技术网

hibernate命名查询中出错

hibernate命名查询中出错,hibernate,Hibernate,错误 错误internal.SessionFactoryImpl-HH000177:命名查询中出现错误: getHeightByTaskId org.hibernate.hql.internal.ast.QuerySyntaxException: 意外标记:对于第1行附近的第79列[从中选择otherheight] com.inn.sitefeg2.bts.model.BTSTaskDetail其中id=2用于更新] 更新的不是有效的JPQL关键字 要锁定,请使用标准方法之一: 现在更新您的实体

错误

错误internal.SessionFactoryImpl-HH000177:命名查询中出现错误: getHeightByTaskId org.hibernate.hql.internal.ast.QuerySyntaxException: 意外标记:对于第1行附近的第79列[从中选择otherheight] com.inn.sitefeg2.bts.model.BTSTaskDetail其中id=2用于更新]


更新的
不是有效的JPQL关键字

要锁定,请使用标准方法之一:

现在更新您的实体并保存它们。

如何

@NamedQuery(name = "BTSTaskDetail.otherheight", query = "SELECT c FROM BTSTaskDetail c WHERE c.otherheight = :otherheight"),

在Hibernate中选择更新的替代方法是什么选择整个实体,进行更改,然后调用merge(),我知道这会起作用。但实际问题是多个线程同时增加高度值。例如,一次高度值为4,5个线程同时从数据库中读取值,并将其增加1,然后在数据库中更新最终结果为5,应该是9。这个问题通过在mysql中运行良好的select For update查询解决。当我们使用select for update时,它会在读取数据时锁定特定行,并在读取数据时解锁该行committed@AnkitPatwa您使用的是什么类型的锁定?我使用的是hibernate框架和spring事务管理。hibernate在内部管理锁定。您需要将bean或facade声明为@Singleton scope of session。
@NamedQuery(name = "BTSTaskDetail.otherheight", query = "SELECT c FROM BTSTaskDetail c WHERE c.otherheight = :otherheight"),
@NamedQuery(name="getHeightByTaskId",query="select otherheight from BTSTaskDetail where id=2",lockMode = PESSIMISTIC_WRITE)