Hãy nói rằng tôi muốn làm một INNER JOIN
giữa hai thực thể Foo
và Bar
:Return cho Phòng Android gia nhập
@Query("SELECT * FROM Foo INNER JOIN Bar ON Foo.bar = Bar.id")
List<FooAndBar> findAllFooAndBar();
Có thể buộc một kiểu trả về như thế này?
public class FooAndBar {
Foo foo;
Bar bar;
}
Khi tôi cố gắng để làm điều đó, tôi nhận được lỗi này:
error: Cannot figure out how to read this field from a cursor.
Tôi cũng đã thử aliasing tên bảng để phù hợp với tên trường, nhưng điều đó không làm việc, hoặc.
Nếu điều này là không thể, làm cách nào tôi nên xây dựng một kiểu trả về tương thích bao gồm tất cả các trường cho cả hai thực thể?
Vâng, điều đó không làm việc kể từ khi đơn vị của tôi có cột có cùng tên (như 'id') ... – pqvst
@pqvst: "làm thế nào tôi nên sạch sẽ xây dựng một tương thích loại trả về bao gồm tất cả các trường cho cả hai thực thể? " - hoặc chọn 'foo' hoặc' bar' thành '@ Embedded' và đặt các trường còn lại trực tiếp trong' FooAndBar' hoặc đặt tất cả các trường trực tiếp trong 'FooAndBar'. Sử dụng 'AS' trong SQL để đổi tên các cột trùng lặp trong tập hợp kết quả, và sử dụng' @ ColumnInfo' khi cần để ánh xạ các cột 'AS' được đổi tên thành những gì bạn muốn các trường được. – CommonsWare
Đó chính là điều tôi muốn tránh phải làm ...Không cảm thấy rất "sạch" đối với tôi:/ – pqvst