Nếu không tham gia vào các vấn đề thiết kế sâu hơn, có hai tùy chọn:
1) Chạy truy vấn bên ngoài giao dịch.
Phản đối (bạn gắn thẻ bài đăng này với) giúp dễ dàng thực hiện các truy vấn không giao dịch ngay cả khi bên trong giao dịch. Chỉ cần sinh ra một thể hiện ofy mới không liên kết với một giao dịch và sử dụng nó để chạy truy vấn ... sau đó quay trở lại làm việc trong giao dịch của bạn. Hãy ghi nhớ rằng điều này không thoát ra khỏi giao dịch và có thể có ảnh hưởng đến tính toàn vẹn của hoạt động. Thường thì nó không quan trọng.
Nếu bạn đang sử dụng Objectify4 bạn chỉ có thể chạy các hoạt động như thế này:
ofy.transactionless.load().type(Thing.class).filter("field", value)...etc
2) Sử dụng một thực thể tra cứu
này thường là câu trả lời đúng khi đối phó với những thứ như tên người dùng. Tạo một thực thể riêng biệt mà bản đồ tên người dùng để đối tượng người dùng của bạn như thế này:
class Username {
@Id String username;
Key<User> user;
}
giao dịch Sử dụng XG để tạo ra một Tên đăng nhập mỗi khi bạn tạo một tài khoản, và cập nhật nó nếu bạn cho phép tên người dùng của bạn để thay đổi. Bây giờ, để thực hiện tra cứu giao dịch Người dùng theo tên người dùng, trước tiên hãy tra cứu Tên người dùng và sau đó sử dụng tên đó để tra cứu Người dùng.
Như bạn biết bạn không thể làm điều đó. Nó có vẻ là một vấn đề thiết kế. Có thể bạn có thể thử hỏi câu hỏi này bằng những gì bạn đang cố gắng làm. – sahid