我正在使用Google App Engine并使用Google的数据存储区界面来存储数据库。 我的问题是,我有以下代码:我有一个网络对象,我想要更新,如果它存在于db,或创建,如果它是第一次。 。为此,我必须捕获异常并重复相同的代码两次 - 它看起来很丑陋和冗余,让我觉得我做错了什么。 令我感到奇怪的第二件事是我没有想到的方法将对象复制到实体,反之亦然。我希望自己实现吗?对每个属性使用setProperty或getProperty是非常不可靠的......我只是想知道为什么没有objectToEntity方法或类似的东西。
这就是我的代码目前的样子......
try {
Entity network=datastore.get(KeyFactory.stringToKey(networks.get(i)._ipDigits));
//If I get here no exception was thrown - entity already exists on db.
Network contextNet= //fetch the network object from servlet context ...
network.setProperty("ip", contextNet._ip); //update the fields using setProperty - no better way??
network.setProperty("offlineUsers",contextNet._offlineUsers);
datastore.put(network);
}
//Entity doesn't exist , create a new entity and save it (while repeating the same code)...
catch (EntityNotFoundException e) {
Entity network=new Entity("network",Long.parseLong(networks.get(i)._ipDigits));
Network contextNet= // ...fetch the network object from servlet context
network.setProperty("ip", contextNet._ip);
network.setProperty("offlineUsers",contextNet._offlineUsers);
datastore.put(network);
}
答案 0 :(得分:0)
您无需获取并放置实体以进行更新。如果你知道实体的ID,你可以把它。如果它存在,它将被更新,否则将被创建。
使用objectify自动将您的课程映射到实体。