当前位置: 首页 > 知识库问答 >
问题:

使用jpa从相同的表中删除选择相同的表mariadb

陶元凯
2023-03-14

在同一个表的操作上我需要从表中删除。JPA查询是

DELETE  FROM com.model.ElectricityLedgerEntity a 
Where a.elLedgerid IN 
 (SELECT P.elLedgerid FROM
   (SELECT MAX(b.elLedgerid) 
    FROM com.model.ElectricityLedgerEntity b
    WHERE b.accountId='24' and b.ledgerType='Electricity Ledger' and b.postType='ARREARS') P );

我得到了这个错误:

根原因org.hibernate.hql.ast.querySyntaxException:意外标记:(第1行附近,第109列[DELETE FROM com.bcits.bfm.model.electricityledgerEntity a中的a.elledgerId IN(SELECT P.elledgerId FROM(SELECT MAX(b.elledgerId)FROM com.bcits.electricityledgerEntity b中的b.accountid='24'和b.ledgertype='Electrical Ledger‘和TaxException.java:47)位于org.hibernate.hql.ast.errorCounter.throwQueryException(errorCounter.java:82)位于org.hibernate.hql.ast.queryTranslatorImpl.parse(queryTranslatorImpl.java:284)

同样的查询也在mysql终端上运行,但是这不能用jpa。有人能告诉我如何用jpa写这个查询吗?

共有1个答案

翟冷勋
2023-03-14

您不能在使用Hibernate的单个查询中执行此操作。如果您想用Hibernate删除最大行,您必须分两步执行。首先,可以找到max条目,然后可以在WHERE子句中使用该值进行删除。

但是您编写的查询实际上应该作为原始MySQL查询运行。因此,为什么不尝试将该查询作为原始查询执行:

String sql = "DELETE FROM com.model.ElectricityLedgerEntity a " +
             "WHERE a.elLedgerid IN (SELECT P.elLedgerid FROM " +
             "(SELECT MAX(b.elLedgerid) FROM com.model.ElectricityLedgerEntity b " + 
             "WHERE b.accountId = :account_id AND b.ledgerType = :ledger_type AND " +
             " b.postType = :post_type) P );";
Query query = session.createSQLQuery(sql);
query.setParameter("account_id", "24");
query.setParameter("ledger_type", "Electricity Ledger");
query.setParameter("post_type", "ARREARS");
 类似资料:
  • 我在MySQL中的查询有问题。我的表有4列,看起来如下所示: 和是来自不同表的外键。 我只想删除一行: 它出现了两次,所以我只想删除它。 我尝试了以下查询: 但它将删除这两个(因为它们是重复的)。有什么关于解决这个问题的提示吗?

  • 问题 你想从数组中删除相同元素。 解决方案 Array::unique = -> output = {} output[@[key]] = @[key] for key in [0...@length] value for key, value of output [1,1,2,2,2,3,4,5,6,6,6,"a","a","b","d","b","c"].unique() # =

  • 刚开始,我正在为一个应用程序创建一个数据库。由于模式在视觉上变得非常复杂,在多个模式中具有相同的user_table是可能的/可行的/推荐的吗? 例如,blogging模式将具有user_table和与此activity相关的其余表。购物模式将再次具有相同的user_table和表来管理购物activity。等等... 目标是将不同模式中的大量表分离开来,从而简化整体管理。 在另一篇文章中,有人建

  • 问题内容: 我的table1和table2具有相同的架构…,我只想拥有一个实体,而不是两个(因为字段将是相同的)。在XML映射的hibernate状态下,我将如何实现这一点。所以我的目标是当我在DAO中进行查询时,如果两个表都映射到同一实体,它将如何知道要从哪个表中提取。 我试图不创建父类,然后再创建两个子类。 谢谢 问题答案: 抱歉回复晚了。我已经在stackoverflow上回答了几次这个问题

  • 我正面临这个问题,我正试图从excel文件读取,并从屏幕上的下拉菜单中选择相应的值。使用代码: 从Eclipse中获取此错误: org.openqa.selenium.invalidselectoreXception:无效的选择器:由于以下错误,无法找到具有xpath表达式//li/div[Contains(.,Cell.GetStringCellValue())]的元素:SyntaxError:

  • 问题内容: 好的,这是我的难题,我建立了一个数据库,其中包含约5个表,所有表的数据结构完全相同。出于本地化的目的,以这种方式分离了数据,并总共分割了约450万条记录。 在大多数情况下,只需要一张桌子就可以了。但是,有时需要两个或多个表中的数据,并且需要按用户定义的列对数据进行排序。这就是我遇到的问题。 数据列: MySQL陈述: MySQL吐出这个错误: 显然,我做错了。有人愿意为我阐明一下吗?