0

我的数据库中有一个 high_scores 表,它有两个值:

player_id
highest_score

我需要一个存储新高分的存储库方法。对于如此简单的事情,我真的不想用乐观锁重试逻辑弄脏我的代码。我想要执行的基本上是这一行:

update high_scores
set highest_score = :new_high_score
where player_id = :player_id
and highest_score <= :new_high_score

这基本上可以很好地实现我的目标,尽管如果用户没有高分,我也不得不担心创建一个高分。我需要确保我永远不会用较低的分数覆盖高分,但这是该表需要的唯一锁定方式。

有没有办法让hibernate做这样的事情,或者我需要求助于自定义SQL?

4

1 回答 1

2

hibernate 支持批量更新(从 3.3 开始)。

编辑:

检查: http ://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html#batch-direct

使其更容易(来自 Hibernate 文档):

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

String hqlUpdate = "update Customer c set c.name = :newName where c.name = :oldName";
// or String hqlUpdate = "update Customer set name = :newName where name = :oldName";
int updatedEntities = s.createQuery( hqlUpdate )
        .setString( "newName", newName )
        .setString( "oldName", oldName )
        .executeUpdate();
tx.commit();
session.close();

干杯!

于 2011-04-29T17:32:46.507 回答