Я боролся с этим и не нашел решения.
Скажем, у меня есть этот образец объекта:
@Entity (tableName = "test")
public class Test{
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
private long id;
@ColumnInfo(name = "field1")
@NonNull
private double field1;
@Ignore
@ColumnInfo(name = "queryField")
private transient String queryField;
}
Итак, в основном моя таблица содержит id и field1, в то время как queryField не является таблицей столбцов, но используется, например, на экранах для отображения дополнительных сведений из другой таблицы.
Тогда в моем DAO
...
@Query("Select a.id, a.field1, b.column as queryField
"from test a inner join some_table on..." +
"where a.id=:someId" +
"order by i.name ASC")
LiveData<List<Test>> get(long someId);
....
Таким образом, выполняя что-то подобное, и результат запроса, содержащий информацию test.id и test.field1, не заполняет свойство queryField, которое остается нулевым.
@Entity не допускает такого рода запросы? Мне нужно создать еще один класс, чтобы добавить новый столбец? Я бы хотел смешать в проекте Entities и Pojos, чтобы упростить задачу.
@pskink интересно, глядя на сгенерированный * DAO_impl.java, я вижу сгенерированный код для моего запроса, но цикл курсора использует только столбцы без Ignore, поэтому as queryField фактически не обрабатывается. Может быть, @Ignore не подходящая аннотация для этого?
Я не знаю, а что, если вы удалите эту аннотацию?
Без Ignore приложение вылетает, так как думает, что новый queryField должен существовать в базе данных ...
это может быть полезно stackoverflow.com/questions/47282111/…
пробовали отлаживать сгенерированный код?