gpt4 book ai didi

google-app-engine - GAE 上的 JDO - @Unowned 字段返回为空值

转载 作者:行者123 更新时间:2023-12-04 05:09:19 26 4
gpt4 key购买 nike

假设我有一个非常简单的经典设置:GAE(1.7.4) + GWT(2.5.0) 应用程序,在本地 Jetty(开发服务器)上运行,使用 JDO 进行持久化。

假设我只有 2 个 @PersistenceCapable 类:Person 和 Color。每个人都只有一种最喜欢的颜色,但这并不意味着这个人拥有这种颜色——许多不同的人可以拥有相同的最喜欢的颜色。众所周知的颜色数量有限,即使不是任何人最喜欢的颜色,也可能存在。

要对此建模,我应该使用 @Unowned 关系 - 如果我错了,请纠正我:

@PersistenceCapable
public class Color { // just the most regular Entity class

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;

@Persistent
String rgb;

// getter, setter, no constructor
}

@PersistenceCapable
public class Person {

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;

@Persistent
String surname;

@Persistent
@Unowned // here is the tricky part
Color color;

// getters, setters, no constructor
}

通过一些简单的、众所周知的、基于 PersistentManager 的代码,我能够成功地创建和保存一个 Color 类的实例。我在 GAE 开发控制台 -> 数据存储查看器中看到它,生成了很好的 key 和 ID/名称 (13),以及我分配的 RGB。

使用非常相似的代码,我能够创建 Person 类的实例(在另一个请求中),将预先存在的颜色指定为他最喜欢的颜色(它预先存在,我通过 pm.getObjectById() 获得它)并保留它.我在数据存储查看器中看到它,我很好地生成了 key 和 ID/名称 (15) 和我分配的姓氏,以及 (13) 的 color_key_OID。这看起来很有希望。

但是,当我从数据库中取回 Person(15) 时(简单的 pm.getObjectById(),没有事务),它正确地分配了我的姓氏,但它的值为 null 而不是 Color(13)!正确 - 数据存储查看器可以正常运行,但我的代码不行。

哦,有问题的代码? “Person p = pm.getObjectById(Person.class, key);”。

(旁注:我也遇到了与 @Unowned 集合相同的问题(数据存储查看器中的值列表很好,但我的代码中的集合字段为空。)我在类路径上的 JDO jar 是“datanucleus-api-jdo-3.1.1。 jar”和“jdo-api-3.0.1.jar”,所以我假设它们支持@Unowned。not-@Unowned 字段没有问题。在持久化或获取时我没有任何异常(exception),只是简单的空值作为字段值。)

最佳答案

要么将颜色标记为“热切获取”

@Persistent(defaultFetchGroup="true")
@Unowned
Color color

或者像这样定义你自己的 fetchgroup:
@FetchGroup(name="eager", members={@Persistent(name="color")})
@PersistenceCapable
public class Person {

并在需要时通过指定要获取的组来使用它:
PersistenceManager pm = pmf.getPersistenceManager();
pm.getFetchPlan().addGroup("eager");

关于google-app-engine - GAE 上的 JDO - @Unowned 字段返回为空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15080085/

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