Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA2.0 EntityManager是否尊重Google App Engine中的当前名称空间? 如何让JPA在生成键时尊重我正在设置的名称空间?_Java_Google App Engine_Namespaces_Jpa 2.0_Entitymanager - Fatal编程技术网

Java JPA2.0 EntityManager是否尊重Google App Engine中的当前名称空间? 如何让JPA在生成键时尊重我正在设置的名称空间?

Java JPA2.0 EntityManager是否尊重Google App Engine中的当前名称空间? 如何让JPA在生成键时尊重我正在设置的名称空间?,java,google-app-engine,namespaces,jpa-2.0,entitymanager,Java,Google App Engine,Namespaces,Jpa 2.0,Entitymanager,我使用以下代码获取当前用户,并将名称空间设置为其用户ID: final OAuthService oauth = OAuthServiceFactory.getOAuthService(); final User user = oauth.getCurrentUser(); NamespaceManager.set(user.getUserId()); 当我执行以下操作时,我在日志中获得了正确的信息: System.out.println("user.getUserId() = " + use

我使用以下代码获取当前用户,并将
名称空间设置为其
用户ID

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());
下面是我如何在我的
实体的构造函数中创建我的
键的方法:

@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()
返回的任何内容,但它没有

当我执行以下代码并将
命名空间设置为
作为输出时,即使我已将其设置为上面代码中的
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()=

管理控制台中的
数据存储查看器中也没有
名称空间

Google App Engine中的JPA EntityManager是否尊重当前的
名称空间
设置?解决方案
我发现了问题所在,我正在调用另一个方法,在移动
NamespaceManager.set(user.getUserId())后,将finally块中的
名称空间设置为我的默认
名称空间
在该方法调用下面,它修复了它

吸取的教训
我应该获取当前的
名称空间
,存储它,然后像示例一样将其设置回去。

尊重名称空间设置吗?你在说什么?JPA将保存您的实体,只要它被正确设置和填充。它100%不知道谷歌应用程序引擎。如果包含
ImageHandle
Key
的实体代码,以及用于填充它们的代码,将非常有用。