gpt4 book ai didi

google-app-engine - 向数据存储区中的实体添加新属性?

转载 作者:太空宇宙 更新时间:2023-11-03 15:29:31 24 4
gpt4 key购买 nike

我的应用引擎数据存储区中有一个实体。该实体实际上只有一个实例。我可以在我的管理控制台中看到它。是否可以通过管理控制台(可能使用 gql)向实体添加新属性?

现在看起来像这样:

Entity: Foo
Attributes: mName, mAge, mScore

我想向该实体添加一个新的 bool 属性,例如“mGraduated”或类似的东西。

在最坏的情况下,我可以编写一些代码来删除该实体,然后保存一个新实体,但我只是想知道。

谢谢

--------更新--------

尝试将新属性添加到我的类(使用 java)并从数据存储区加载后我得到以下信息:

java.lang.NullPointerException: 
Datastore entity with kind Foo and key Foo(\"Foo\") has a null property named mGraduated.
This property is mapped to com.me.types.Foo.mGraduated, which cannot accept null values.

这就是我的实体类的样子,我刚刚添加了新属性 (mGraduated),然后部署,然后尝试从数据存储加载单个实体(这产生了上述异常):

@PersistenceCapable
public class Foo
{
@PrimaryKey
private String k;

/** Some old attributes, look like the following. */
@Persistent
@Extension(vendorName = "datanucleus", key = "gae.unindexed", value="true")
private String mName;

...

/** Tried adding the new one. */
@Persistent
@Extension(vendorName = "datanucleus", key = "gae.unindexed", value="true")
private boolean mGraduated;

最佳答案

实现它的唯一方法是使用 bool 值作为新属性的类型..

比起在 set 方法中你可以接受 bool 值,那没问题。

如果您希望 get 方法也返回 bool 值。您也可以,但请务必检查该值是否为 null,如果是,则返回默认值(例如 true)

所以

private Boolean newProp = null; // can also assing default value .. e.g. true;

public void setNewProp(boolean val)
{
this.newProp = val;
}

public boolean getNewProp()
{
if(this.newProp == null)
return true; // Default value if not set

return this.newProp.booleanValue();

}

我建议您在这种情况下不要迁移您的数据 - 这可能会非常昂贵并且很容易耗尽您的配额(读取旧数据、创建新数据、删除旧数据 = 对数据存储中的每个条目执行 3 次操作)

关于google-app-engine - 向数据存储区中的实体添加新属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8920610/

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