【问题标题】:Delete query in JPA gives errorsJPA 中的删除查询给出错误
【发布时间】:2019-04-09 07:13:35
【问题描述】:

我在尝试使用 JPA 中的删除查询删除某些内容时遇到一些错误。

这是在主包中调用的删除函数。

public void removeAppoinmentsFromDB(int idToDelete) {
    entityManager.getTransaction().begin();
    Query query = entityManager.createQuery("DELETE FROM Programari WHERE idProgramari = :idToDelete");
    query.executeUpdate();
    entityManager.getTransaction().commit();        
}

我得到这个错误: 线程“main”中的异常 java.lang.IllegalStateException:在查询执行期间提供的参数列表中找不到查询参数 idToDelete。

在 org.eclipse.persistence.internal.jpa.QueryImpl.processParameters(QueryImpl.java:579)

在 org.eclipse.persistence.internal.jpa.QueryImpl.executeUpdate(QueryImpl.java:294)

在 util.DatabaseUtil.removeAppoinmentsFromDB(DatabaseUtil.java:85)

在 main.Main.main(Main.java:82)

【问题讨论】:

  • 在询问异常时,请始终发布异常的准确和完整的堆栈跟踪。但是这个查询有什么意义呢?为什么不直接使用 EntityManager.remove()? docs.oracle.com/javaee/7/api/javax/persistence/…
  • @JBNizet 我应该像老师说的那样使用删除查询,我在 5 分钟前尝试了删除并且一切正常,但我应该使用查询。跟踪链接:pastebin.com/1qnR6vh0
  • 在问题中发布堆栈跟踪(不是链接,堆栈竞争本身)。然后发布实际代码。堆栈跟踪清楚地表明您没有执行您发布的查询。然后显示相关代码。宠物医院是什么?什么是程序化?最后,查询中的参数以: 开头:WHERE idAppoinment = :idToDelete
  • @JBNizet 我用新的跟踪和代码编辑了帖子。
  • 在问题中发布堆栈跟踪(不是链接,堆栈跟踪本身)。 [...]然后显示相关代码。宠物医院是什么?什么是程序设计?

标签: java mysql jpa


【解决方案1】:

您需要在查询中设置要删除的 ID。

public void removeAppoinmentsFromDB(int idToDelete) {
    entityManager.getTransaction().begin();
    Query query = entityManager.createQuery("DELETE FROM Programari WHERE idProgramari = :idToDelete");
    query.setParameter("idToDelete", idToDelete);
    query.executeUpdate();
    entityManager.getTransaction().commit();        
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-16
    • 2020-10-14
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    相关资源
    最近更新 更多