Java JPA,不能删除记录

Java JPA,不能删除记录,java,sql,hibernate,jpa,Java,Sql,Hibernate,Jpa,我试图使用JPA删除多行(如果有的话),得到nullpointer异常。参数和实体管理器不为空。知道是什么导致了这个异常吗 另外,该类被注释为@Transactional @Override public void removeAccount(String id) { try { int deleteRecords = entityManager.createQuery("DELETE from bankaccount b where b.accountNumber =

我试图使用JPA删除多行(如果有的话),得到nullpointer异常。参数和实体管理器不为空。知道是什么导致了这个异常吗

另外,该类被注释为@Transactional

@Override
public void removeAccount(String id) {
    try {

        int deleteRecords = entityManager.createQuery("DELETE from bankaccount b where b.accountNumber = ?1", BankAccount.class)
                .setParameter(1, accountNumber)
                .executeUpdate();

    } catch (Exception ex) {
        ex.getMessage();
    }
}

要删除实体,您应该首先查询它,然后将其传递给remove方法

例如,如果
accountNumber
BankAccounts
主键:

BankAccount account = entityManager.find(BankAccount.class, accountNumber);
entityManager.remove(account);
更新

如果无法使用
主键
并需要删除多个条目,则可以使用您提供的代码,但不要进行键入查询:

int numberOfRecords = entityManager
    .createQuery("DELETE from bankaccount b where b.accountNumber = ?1")
    .setParameter(1, accountNumber)
    .executeUpdate();

您不必输入第二个参数,我也在查询中输入了类名
BankAccount
字符串id
从未在方法中使用

int deleteRecords = entityManager.createQuery("DELETE from BankAccount b where b.accountNumber = ?1")
                .setParameter(1, accountNumber)
                .executeUpdate();

什么是
ex.getMessage()用于?您可以发布stacktrace吗?使用remove方法而不是query,如[此处][1]所述。[1] :和
entityManager.createQuery
?@matheszabi entity manager find方法仅使用主键进行查找,我只有要查找的帐户id?@nachokk yes entityManager.createQuery提供空指针异常,为什么?此处accountNumber不是主键,我将删除多条记录,这就是为什么我更喜欢使用简单的删除查询。请改进或删除此答案。它应该是createNativeQuery,而不是createQuery。createNativeQuery(“从银行账户b中删除b,其中b.accountNumber=?1”)