Запрос постоянных объектов по атрибутам их отношений с использованием ORMLite. - PullRequest
0 голосов
/ 22 марта 2012

Я только начал читать об ORMLite, поэтому я все еще начинающий. Насколько я понимаю, я могу запрашивать объекты, используя любой из их постоянных атрибутов.

Например, если у меня есть следующие классы:

@DatabaseTable
public class Bill {
  @DatabaseField String code;
  Client client; 
  List<Item> items;
}

@DatabaseTable
class Client {
  @DatabaseField String name;
}

@DatabaseTable
class Item {
  @DatabaseField String name;
}

(не уверен, как аннотировать атрибуты client и items в классе Bill).

В любом случае такой запрос поможет мне получить все объекты Bill с определенным кодовым номером:

QueryBuilder<Bill, String> queryBuilder = BillDao.queryBuilder();
Where<Bill, String> where = queryBuilder.where();
where.eq(BILL.NAME_CODE, "abc123");
PreparedQuery<Account> preparedQuery = queryBuilder.prepare();

Мой вопрос: каков рекомендуемый способ в ORMLite писать запросы, которые имеют условия в транзитивных отношениях моего модельного объекта? например "Все счета, которые включают определенный элемент с определенным именем"? или «Все клиенты, которые купили товар с определенным именем»?

Заранее спасибо!.

1 Ответ

1 голос
/ 20 мая 2012

Чтение полей сторонних объектов и Иностранных коллекций в документах ormLite .

Ваши отношения будут:

@DatabaseTable(tableName = "bills")
public class Bill {
    public static final String ACCOUNT_ID_FIELD_NAME = "client_id";
    @DatabaseField(generatedId = true)
    private int id;
    @DatabaseField(foreign = true, columnName = ACCOUNT_ID_FIELD_NAME)
    private Client client;
    @DatabaseField 
    private String code;
    Client client; 
    List<Item> items;

    public Bill(){

    }
    public Bill(Client client, String code){
        this.client = client;
        this.code = code;
    }

    public int getId(){
        return this.id;
    }
    public String getCode(){
        return this.code;
    }
}

@DatabaseTable(tableName = "clients")
class Client {
    public static final String NAME_FIELD_NAME = "name";
    public Client() {
        // all persisted classes must define a no-arg constructor with at least package visibility
    }
    public Client(String name) {
        this.name = name;
    }
    @DatabaseField(generatedId = true)
    private int id;
    @DatabaseField(columnName = NAME_FIELD_NAME, canBeNull = false) 
    private String name;

    public int getId(){
        return this.id;
    }
    public String getName(){
        return this.name;
    }
}

Более подробную информацию можно найти в примеры кода .

...