使用带有JPA的where子句进行更新

时间:2017-03-02 21:44:29

标签: java jpa sql-update where-clause

我有一个名为Sequence No的专栏。无论何时我的java程序收到消息,该消息的序列号始终高于最后一条消息。当我更新一行时,我需要检查序列号是否大于我的数据库中的序列号,如果不是,我需要删除该消息。像Update MyTable t where t.sequenceNo < SEQUENCE_NO_VALUE set (t.sequenceNo = SEQUENCE_NO_VALUE, Set all my columns..);之类的东西我之前用 SQL 做过这个,但从不使用 JPA 。我的另一个问题是我想立刻更新整行。像这样......

public void saveWithCondition(Account entity, Integer sequenceNO) {
    EntityManagerHelper.log("saving Account instance", Level.INFO, null);

    try {
        CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
        CriteriaUpdate<Account> update = criteriaBuilder.createCriteriaUpdate(Account.class);

        update.set(entity);//set the entire row instead of each column.
        update.where(criteriaBuilder.lessThan(entity.getODSSequenceNo(), SequenceNO));

        this.em.createQuery(update).executeUpdate();    

    } catch (RuntimeException re) {

        EntityManagerHelper.log("save failed", Level.SEVERE, re);
        throw re;
    }
}

0 个答案:

没有答案