如何让 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
管理控制台中。