Bez sięgnięcie do głębszych zagadnień projektowych, są naprawdę dwie opcje:
1) Uruchom kwerendę poza transakcji.
Objectify (oznaczyłeś ten post tagiem) ułatwia wykonywanie zapytań nietransakcyjnych nawet w trakcie transakcji. Po prostu uruchom nową instancję niezwiązaną z transakcją i użyj jej do uruchomienia kwerendy ... a następnie wróć do pracy w transakcji. Należy pamiętać, że to wybicie się z transakcji i może mieć wpływ na integralność operacji. Często to nie ma znaczenia.
Jeśli używasz Objectify4 można po prostu uruchomić operację takiego:
ofy.transactionless.load().type(Thing.class).filter("field", value)...etc
2) Użyj podmiot odnośników
zwykle jest to prawidłowa odpowiedź gdy ma do czynienia z rzeczami takimi jak nazwy użytkowników. Utwórz osobny podmiot, który mapuje nazwę użytkownika do obiektu użytkownika tak:
class Username {
@Id String username;
Key<User> user;
}
transakcji Zastosowanie XG aby utworzyć nazwę użytkownika za każdym razem utworzyć użytkownika i zaktualizować go, jeśli pozwalają na zmianę nazwy użytkownika. Teraz, aby przeprowadzić transakcyjne wyszukiwanie Użytkownika według nazwy użytkownika, najpierw należy wyszukać Nazwę użytkownika, a następnie użyć jej do wyszukania Użytkownika.
Jak wiesz, nie możesz tego zrobić. To wydaje się być problemem projektowym. Być może możesz spróbować zadać to pytanie według tego, co próbujesz zrobić. – sahid