gpt4 book ai didi

java - 通过 Apache Cayenne 更新对象

转载 作者:行者123 更新时间:2023-11-30 00:11:04 24 4
gpt4 key购买 nike

我和你们一起花了两个小时,但没有成功。

我正在将 Apache Maven 与 mysql 和 Java EE(带有 ReSTLet 前端)结合使用。

我试图获取一个给定 ID 属性的对象,然后更新它并保存回数据库。我看过这个答案here但它不起作用!

我还阅读了文档 here

按照数据传输的顺序,我接受一个 JSON 对象,将其输入到对象的构造函数中,构建该对象,获取一个新对象(与我们的 JSON 对象无关),根据给定的 id 填充它,合并两个对象并保存回数据库。

以下是更新数据库的代码:

ObjectContext context = DataContext.createDataContext();
ObjectId idObject = new ObjectId("Vessel", Vessel.ID_PK_COLUMN, id);
ObjectIdQuery query = new ObjectIdQuery(idObject, false, ObjectIdQuery.CACHE_REFRESH);
Vessel v = (Vessel) DataObjectUtils.objectForQuery(context, query); //<-- This is our current vessel in the database.
v.updateVessel(new Vessel(json)); //<-- this calls the method below
context.commitChanges();

公共(public)容器(JSONObject json) - 正在使用的容器的构造函数

public Vessel(JSONObject json)
{
Iterator<String> keysIterator = json.keySet().iterator();
while (keysIterator.hasNext())
{
String key = keysIterator.next();
this.values.put(key, json.get(key));
}
}

vessel.update(Vessel v) - 这是我正在使用的更新方法

public void updateVessel(Vessel v)
{
for (Map.Entry pairs : v.values.entrySet()) {
if(pairs.getValue() != null)
{
//okay it's not null, lets validate
Object o = pairs.getValue();
if(o instanceof String || o instanceof Double || o instanceof Integer || o instanceof Float || o instanceof Boolean)
{
//okay the value is of valid type
this.values.put(pairs.getKey().toString(), o);
}
}
}
}

我意识到使用这些循环存储变量存在巨大的安全风险。然而,这极大地加快了我的开发时间。我还没有测试当你传入一个实际上没有使用的变量时会发生什么,但我想它会被保存。无论如何,这不是我的问题,所以请不要在这里提出这个问题(给我留言!)。

如果我这样做v.setSomething("awesome")而不是打电话 v.update(...)然后代码按预期工作(首先在上面提到的答案中找到)。

有人有什么想法吗?非常非常非常感谢您的帮助!

编辑:(大约1小时后)

我能够通过更改this.values.put(pairs.getKey().toString(), o);中的vessel.update代码来使其工作(到目前为止,需要完成测试)。至this.writeProperty(pairs.getKey().toString(), o);

测试后再次报告...

最佳答案

我上面的编辑似乎已经解决了这个问题。我试图找到 CayenneDataObject 的源代码,但没有成功,所以我只能假设这解决了问题,因为 writeProperty() 执行了一些其他代码,而不仅仅是更新 map this.values

这是vessel.update()下的工作代码。

public void updateVessel(Vessel v)
{
for (Map.Entry pairs : v.values.entrySet()) {
if(pairs.getValue() != null)
{
//okay it's not null, lets validate
Object o = pairs.getValue();
if(o instanceof String || o instanceof Double || o instanceof Integer || o instanceof Float || o instanceof Boolean)
{
//okay the value is of valid type
this.writeProperty(pairs.getKey().toString(), o);
}
}
}
}

关于java - 通过 Apache Cayenne 更新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24049135/

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