Hibernate / JPA:先更新再删除一次交易

时间:2018-08-09 16:01:41

标签: java hibernate jpa

是否可以在同一事务中执行一次更新查询然后执行删除查询?我试图基于令牌的哈希值激活一个帐户,然后在同一笔交易中删除该令牌。

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();

1 个答案:

答案 0 :(得分:1)

是的,使用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;