我有一个名为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;
}
}