0

如何让 JPA 在生成密钥时尊重我设置的命名空间?

我正在使用以下代码获取当前用户并将Namespace其设置为UserId

final OAuthService oauth = OAuthServiceFactory.getOAuthService();
final User user = oauth.getCurrentUser();
NamespaceManager.set(user.getUserId());

当我执行以下操作时,我会在日志中获得正确的信息:

System.out.println("user.getUserId() = " + user.getUserId());
System.out.println("user.toString() = " + user.toString());

这是我在 myKey的构造函数内部创建的方法Entity

@Entity
public class ImageHandle
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @JsonSerialize(using = com.vertigrated.gae.cms.jackson.KeySerializer.class)
    @JsonDeserialize(using = com.vertigrated.gae.cms.jackson.KeyDeserializer.class)
    private Key key;
 ....

我在构造函数中做的第一件事是:

this.key = KeyFactory.createKey(ImageHandle.class.getSimpleName(), uuid.toString());

Google App Engine 文档说KeyFactory应该使用当前NamespaceManager.get()返回的任何内容,但事实并非如此。

当我执行以下代码并将Namespace设置设置""为输出时,即使我已user.getUserId()在上面的代码中将其设置为:

final ImageHandle ir = new ImageHandle(fs.getBlobKey(aef), uuid, url, name, w, h, s);
ENTITY_MANAGER.persist(ir);
System.out.println("ir.getKey().getNamespace() = " + ir.getKey().getNamespace());

输出结果:ir.getKey().getNamespace() =

也没有Namespaces出现在DataStore Viewer管理控制台中。

Google App Engine 中的 JPA EntityManager 是否尊重当前Namespace设置?

4

1 回答 1

0

解决方案

我弄清楚问题出在哪里,我正在调用另一个方法,该方法将Namespacefinally 块中的设置为我的默认值Namespace,一旦我移动了NamespaceManager.set(user.getUserId());该方法调用的下方,它就修复了它。

学过的知识

我应该得到 current Namespace,存储它并像示例一样将其设置回来。

于 2013-02-16T21:01:05.417 回答