Java Hibernate/JPA:在一个事务中更新然后删除

Java Hibernate/JPA:在一个事务中更新然后删除,java,hibernate,jpa,Java,Hibernate,Jpa,是否可以在同一事务中执行更新查询,然后在更新查询之后执行删除查询?我正在尝试根据令牌的哈希激活一个帐户,然后在同一事务中删除该令牌 transaction.begin(); entityManager .createNativeQuery( "UPDATE accounts AS ac " + "INNER JOIN account_tokens AS ak ON ac.id = ak.account_id "

是否可以在同一事务中执行更新查询,然后在更新查询之后执行删除查询?我正在尝试根据令牌的哈希激活一个帐户,然后在同一事务中删除该令牌

transaction.begin();
entityManager
.createNativeQuery(
                      "UPDATE accounts AS ac "
                    + "INNER JOIN account_tokens AS ak ON ac.id = ak.account_id "
                    + "SET ac.account_state = "
                    + "CASE "
                    + "WHEN ac.account_state = 'AWAITING_ACTIVATION' THEN 'ACTIVATED' "
                    + "END "
                    + "WHERE ak.token_hash = :tokenHash")
                    .setParameter()
                    .executeUpdate();
em.createNativeQuery(
                      "DELETE FROM account_tokens AS ak "
                    + "WHERE ak.token_hash = :tokenHash")
                    .setParameter()
                    .executeUpdate(); // delete
transaction.commit();

是的,使用PL/SQL过程

您不能减少查询的数量——它们都做不同的事情——但是您可以通过将所有查询包装为PLSQL函数来减少到数据库的往返次数和解析次数

   CREATE PROCEDURE s_u_d(a)
    BEGIN

    UPDATE tab_x SET tab_x.avalue=1 WHERE tab_x.another=a;

    DELETE FROM tab_y WHERE tab_y.avalue=a;

    SELECT * 
    FROM tab_x
    WHERE tab_x.another=a;

    END;

逻辑上是可能的。您正在更新和删除不同的表,这很好。在同一个表上进行操作可能会导致数据不一致。这在逻辑上是可以的。我觉得这没什么问题。你有什么特别的困惑?你对任何场景有什么问题吗?@ShafinMahmud的问题是,我在执行更新查询后删除第一个实体-我使用一个内部连接并更新一个表的外键,然后,我想删除该实体。也许我应该在问题中提到这一点,我的错。这可以吗?--我不会有任何数据不一致,因为这是一次性的,你可以随时更新你的问题。能否请您提及您正在处理的更新和删除查询?你已经描述过了,我知道。但看到这些疑问会更清楚地说明问题。请用这些详细信息更新您的问题。@ShafinMahmud Done。谢谢,谢谢你的回答。但是,不幸的是,我使用MySQL。