Как получить имена столбцов / полей в OrmLite?

Я определяю имена таблиц / полей с помощью обычных аннотаций, например:

@DatabaseTable(tableName = "M")
public class Headers {
    //android requires primary key as _ID
    @DatabaseField(generatedId = true, columnName = "_ID", dataType = DataType.INTEGER_OBJ)
    private Integer id;

    @DatabaseField(
            columnName = "MM2",
            uniqueCombo = true,
            canBeNull = true, //null means root folder
            dataType = DataType.INTEGER_OBJ
    )
    private Integer parentId;
}

Между тем где-то глубоко в моем коде мне нужно сделать несколько запросов, например:

QueryBuilder<Headers, Integer> qb = headersDao.queryBuilder();
qb.where().eq("_ID",  headerId); //_ID field name

Этот вид кода выглядит некрасиво, так как имя поля (в данном случае _ID) жестко закодирован (даже если будет объявлен как final static String)

Вопрос: это нормальная практика кодирования OrmLite? Я бы ожидал, что я мог бы использовать вместо жестко _ID поле небольшой код. OrmLite наверняка "знает" все имена полей. Кто-нибудь может мне помочь?

1 ответ

Решение

Определите константу для имени поля, например

private static final String FIELD_ID = "_ID";
// Or make it public as Gray said into comment
public static final String FIELD_ID = "_ID";

и использовать его как

//android requires primary key as _ID
@DatabaseField(generatedId = true, columnName = FIELD_ID, dataType = DataType.INTEGER_OBJ)
private Integer id;

И в ваш запрос

QueryBuilder<Headers, Integer> qb = headersDao.queryBuilder();
qb.where().eq(FIELD_ID,  headerId); //_ID field name

Если вы посмотрите на документацию

Они также следуют тому же

QueryBuilder<Account, String> qb = accountDao.queryBuilder();
Where where = qb.where();
// the name field must be equal to "foo"
where.eq(Account.NAME_FIELD_NAME, "foo");
// and
where.and();
// the password field must be equal to "_secret"
where.eq(Account.PASSWORD_FIELD_NAME, "_secret");
PreparedQuery<Account, String> preparedQuery = qb.prepareQuery();
Другие вопросы по тегам