gpt4 book ai didi

java - 无法使用相同的 ID 在数据库中重新创建 Google 数据存储 key

转载 作者:太空宇宙 更新时间:2023-11-04 06:35:22 24 4
gpt4 key购买 nike

我正在创建一个应用程序,目前有两种主要类型:用户和行程

每个用户实体都是唯一的,而一个用户可以有许多潜在的旅行实体。

几个相关的问题:

1) 使用我在下面编写的类,我可以创建一个新用户(addUser 方法),但应用程序无法识别该用户第二次存在,它只是不断创建一个新用户(并替换前一个用户,因为它们具有相同的名称)。

2) 即使 key 应该已经存在于数据存储区中,删除行程(deleteTrip 方法)也不起作用

尽管如此,我仍然可以成功添加行程类型并使用我提供的 uniqueID 从数据存储中检索它们。我对这些键做错了什么?

这是我的代码:

public class Persistence {

static Logger logger = Logger.getLogger(Persistence.class.toString());
private static DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();


public static ArrayList<Trip> getTrips(String uniqueID) {
ArrayList<Trip> trips = new ArrayList<Trip>();

Key ancestorKey = KeyFactory.createKey("User", uniqueID);

Query query = new Query("Trip", ancestorKey);
List<Entity> tripsFromCloud = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(10));

for( int i = 0 ; i < tripsFromCloud.size() ; i++ ) {
Entity tripEntity = tripsFromCloud.get(i);
String city = tripEntity.getProperty("city").toString();
String leaveDate = "";
String returnDate = "";

if( tripEntity.getProperty("leaveDate") != null ) {
leaveDate = tripEntity.getProperty("leaveDate").toString();
}

if( tripEntity.getProperty("returnDate") != null ) {
returnDate = tripEntity.getProperty("returnDate").toString();
}

Trip t = new Trip();
t.setCity(city);
t.setArriving(leaveDate);
t.setReturning(returnDate);
trips.add(t);

}

return trips;
}

public static void addTrip(String uniqueID, String city, String leaveDate, String returnDate) {


Key ancestorKey = KeyFactory.createKey("User", uniqueID);

Date date = new Date();

Key key = KeyFactory.createKey(ancestorKey, "Trip", date.toString() + uniqueID);

Entity newTrip = new Entity(key);

newTrip.setProperty("city", city);
newTrip.setProperty("leaveDate", leaveDate);
newTrip.setProperty("returnDate", returnDate);


datastore.put(newTrip);

}

public static void deleteTrip(String uniqueID, String city) {

Key key = KeyFactory.createKey("User", uniqueID);

datastore.delete(key);

}

public static void addUser(String uniqueID) {

Transaction txn = datastore.beginTransaction();
Key userKey = KeyFactory.createKey("User", uniqueID);
Entity user = null;
try {
user = datastore.get(userKey);
logger.log(Level.INFO, "Found user: " + user.getKey().getName());
} catch (EntityNotFoundException e) {
user = new Entity(userKey);
user.setProperty("id", uniqueID);
user.setProperty("about", "");
userKey = datastore.put(user);
logger.log(Level.INFO, "Created new user with id: " + uniqueID);
}
txn.commit();

}

}

最佳答案

据我所知,由于我不知道每次旅行的每个唯一 key 是什么,因此我必须首先运行查询才能获取从中获取 key 的实体,如下所示:

private static Key getKeyForCity(String uniqueID, String city) {

Key ancestorKey = KeyFactory.createKey("User", uniqueID);

Query query = new Query("Trip", ancestorKey);
query.addFilter("city", FilterOperator.EQUAL, city);
Entity trip = datastore.prepare(query).asSingleEntity();

return trip.getKey();
}

一旦我有了正确的 key ,就可以轻松删除实体:

public static void deleteTrip(String uniqueID, String city) {

Key key = getKeyForCity(uniqueID, city);

datastore.delete(key);

}

从 App Engine 1.6 升级到 1.9 后,添加用户的问题神奇地得到了解决

关于java - 无法使用相同的 ID 在数据库中重新创建 Google 数据存储 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25481874/

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