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());

Keyこれが私のコンストラクターの内部を作成する方法です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 AppEngineのJPAEntityManagerは現在のNamespace設定を尊重しますか?

4

1 に答える 1

0

解決

私は問題が何であるかを理解しました.finallyNamespaceブロックをデフォルトに設定している別のメソッドを呼び出しています.そのメソッド呼び出しNamespaceの下に移動するNamespaceManager.set(user.getUserId());と、それが修正されました.

学んだ教訓

現在の を取得しNamespace、保存して、例のように元に戻す必要があります。

于 2013-02-16T21:01:05.417 に答える