【发布时间】:2011-04-18 13:45:16
【问题描述】:
此语法不会在不同的 Fetch Groups 中产生唯一值:
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private long id;
所以我编写了下面的方法来模拟为我的订单模型生成数据库序列。但我不确定的是事务状态需要在这里配置什么 (isolation level / nontransactional read / nontransactional write / optimistic / etc.):
public long getNextId()
{
PersistenceManager pm = this.getPm();
Transaction tx = pm.currentTransaction();
tx.begin();
long nextId = 0;
Query query = pm.newQuery("select id from orders order by id desc");
query.setRange(0, 1);
try
{
List<Order> results = (List<Order>) query.execute();
if (results.iterator().hasNext())
{
for (Order r : results)
{
nextId = r.getId() + 1;
}
}
else
{
return 0;
}
}
catch (Exception e)
{
return 0;
}
tx.commit();
return nextId;
}
交易的范围是否需要比这种方法更广泛?换句话说,它是否还应该包括新订单的插入操作?
我想确保我插入的两个订单不能在整个应用程序中具有相同的 id 值。
【问题讨论】:
标签: java database google-app-engine transactions jdo