【问题标题】:Auto increment column i JDO, GAE自动递增列 i JDO、GAE
【发布时间】:2011-01-01 08:17:12
【问题描述】:

我有一个包含一些字段的数据类,一个是我认为是 PK 的 URL,如果我添加一个新项目(进行新的同步)并保存它应该覆盖数据库中的项目,如果它是相同的 URL .但是我还需要一个“正常”的 Long id,它会为数据库中的每个对象递增,对于这个我总是得到 null,除非我将它标记为 PK,如何获得这种递增但没有列作为我的 PK?

@Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
private Long _id;
@Persistent
private String _title;
@PrimaryKey
@Persistent
private String _url;

/维克托

【问题讨论】:

  • 如果URL是key,为什么还需要long呢?
  • 从网页请求对象时,我不想将完整的 url 添加到查询字符串中,而只是添加对象的 id。

标签: java google-app-engine google-cloud-datastore jdo


【解决方案1】:

这行得通:

@PrimaryKey
private String _url;

@Persistent(valueStrategy = IdGeneratorStrategy.SEQUENCE)
private Long _id;

使用您的密钥填充_url,并在保存对象时不设置_id_id 然后应该会自动填充,但我不确定它是否会是一个顺序 ID。

信息来源:official Google AppEngine wiki

【讨论】:

  • 好的,这不起作用,因为我尝试将 _url 设置为“未编码字符串”并且它需要编码字符串,所以我的问题是什么是编码字符串?我已经尝试搜索但没有找到任何关于此的内容。还尝试对字符串进行 base64 编码,但没有帮助。
  • 我明白了。编码字符串是Key 类的字符串表示形式,可以使用KeyFactorykeyToString()stringToKey() 方法与字符串相互转换,但我想这不是你想要的。看来您可以通过指定 @PrimaryKey 注释来使用自定义字符串键。我修改了答案,试试看。
  • 其实我也遇到了同样的问题。我提供的答案似乎有效。确保将 valueStrategy 设置为 SEQUENCE 以获取顺序递增的 ID。
  • 谢谢!它有效,我可以发誓在我在这里发布问题之前尝试过,但显然不是:)
猜你喜欢
  • 1970-01-01
  • 2016-03-07
  • 2022-07-20
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 2012-04-10
  • 2014-04-15
  • 2014-10-01
相关资源
最近更新 更多