小编Dav*_*ill的帖子

无法围绕appengine数据存储持久化

我遇到了"无法在单个事务中对多个实体组进行操作".使用APPENGINE FOR JAVA w/JDO时出现问题,代码如下:

PersistenceManager pm = PMF.get().getPersistenceManager();

查询q = pm.newQuery("SELECT this FROM"+ TypeA.class.getName()+"WHERE userId == userIdParam"); q.declareParameters("String userIdParam"); 列表poos =(列表)q.execute(userIdParam);

for(TypeA a:allTypeAs){a.setSomeField(someValue); } pm.close(); }

似乎问题是我不能同时在多个实体上操作b/c它们在事务中不在同一个实体组中.虽然看起来我不在事务中,但是appengine会生成一个,因为我在jdoconfig.xml中有以下设置:

   <property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
Run Code Online (Sandbox Code Playgroud)

精细.到目前为止,我想我明白了.

但是 - 如果我在上面的代码中用TypeB替换TypeA - 我没有得到错误.我不相信类型a和类型b之间有任何不同 - 它们都具有相同的键结构.他们确实有不同的领域,但这不重要,对吧?

我的问题是 - TypeA和TypeB之间可能有什么不同,他们给出了这种不同的行为?因此,你从根本上误解了这种行为甚至可能存在......

谢谢.

java google-app-engine persistence jdo google-cloud-datastore

1
推荐指数
1
解决办法
852
查看次数

如何在没有轮询的情况下向客户端发送消息?

GAE Chats的每个例子都使用某种轮询.但是,如果我的GAE应用程序包含客户端列表(必要时在数据存储区中),也许我可以通过向所有这些客户端发送消息来避免轮询.我怎样才能做到这一点?

google-app-engine chat

1
推荐指数
1
解决办法
557
查看次数

App Engine命名空间

App Engine提供了一种设置当前"命名空间"的方法.这是一种能够轻松引用变量的方法,因此并不总是必须在一个代码中插入数据库查找吗?

python google-app-engine

1
推荐指数
1
解决办法
309
查看次数

使用Google帐户进行App Engine以外的身份验证

如果您不使用App Engine,是否可以在应用程序中使用Google帐户进行身份验证?此服务仅适用于在GAE中运行的应用程序吗?

谢谢.

google-app-engine

0
推荐指数
1
解决办法
681
查看次数

有没有办法在GAE/J中使用JDO获得非持久性字段?

我不打算成为一个孩子的问题,因为我不得不独立操纵它,而且我不想坚持问题领域,我会通过手动检索问题来填补它.这是代码.

Questionnaire.java

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Questionnaire{
    //supposedly non-persistent
    public List<Question> questions  = new ArrayList<Question>();

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    public Long questionnaireID;

    @Persistent
    public String title;

    @Persistent
    private int items;

    @Persistent
    public String description;
Run Code Online (Sandbox Code Playgroud)

Question.java

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Question{
    //non-persistent as well
    public ArrayList<Choice> choiceList = new ArrayList<Choice>();

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    public Long questionID;

    @Persistent 
    public String text;

    @Persistent 
    public long questionnaireID;


    public Question(){

    }
Run Code Online (Sandbox Code Playgroud)

会吐出这个错误:

org.datanucleus.store.appengine.MetaDataValidator $ DatastoreMetaDataException:com.ivanceras.server.Question.questionID的元数据错误:不能有java.lang.Long主键并且是子对象(拥有字段是com.ivanceras .server.Questionnaire.questions).

java google-app-engine jdo

0
推荐指数
1
解决办法
830
查看次数

0
推荐指数
1
解决办法
74
查看次数

为服务媒体项目生成密钥的最佳实践(照片,mp3,文档等)

我正在制作P2P媒体共享功能,用户可以与他人共享文件(图像,mp3等).当用户与另一个共享文件时,我只需向他们发送该文件的链接即可.链接看起来像:

http://www.domain.com/file?q=unique_key

现在,unique_key必须是字母数字且不易猜测,所以我打算使用文件记录的编码密钥.

这在我早期的Python GAE应用程序中很简单,但在我的新Java应用程序中,我无法获得此Key值,我得到的是一个Long(数字)ID.

我的实体有一个名为ID的字段,它是Long,但在我的GAE管理控制台中有一个实体编码的密钥,它是字母数字,我希望这对我数据库中的每条记录都是唯一的.那么如何访问呢?

我正在使用Objectify,当我创建这样的新密钥时

Key myKey = new Key(FileEntity.class,entityID);

myKey是一个包含一些文本的字符串,但它是我正在寻找的uniqye alpha数字id.

对不起我的模糊问题,请帮忙.

java google-app-engine objectify google-cloud-datastore

0
推荐指数
1
解决办法
180
查看次数