gpt4 book ai didi

java - 如何配置 JDO 事务来模拟在 App Engine Java 中创建数据库序列?

转载 作者:行者123 更新时间:2023-12-02 08:29:17 25 4
gpt4 key购买 nike

此语法不会在不同的提取组中生成唯一的值:

@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private long id;

所以我编写了下面的方法来模拟为我的订单模型生成数据库序列。但我不确定这里需要配置什么事务状态(隔离级别/非事务性读取/非事务性写入/乐观/等 ):

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 值。

最佳答案

使用 IdGeneratorStrategy.SEQUENCE 生成的 ID 对于具有相同父级的所有实体来说是唯一的。如果您的实体是根实体(例如,没有父实体),那么它们都将获得唯一的 ID。您有子实体但需要所有子实体都有一个唯一的 ID 的用例是什么?

关于java - 如何配置 JDO 事务来模拟在 App Engine Java 中创建数据库序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3817629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com