jeudi 28 mai 2015

How could I do execute LIKE with ORMLite?

I'm trying execute a LIKE with ORMLite SQLite in Android. The problem is I need this Like execute from 2 entities and use or() clause.

How could I do this ?

SQL

SELECT * FROM produto t1
INNER JOIN empresa t2 ON (produto.empresa_id = empresa.empresa_id)
WHERE t1.nome LIKE "value" OR t2.nome LIKE "value"

Entities

@DatabaseTable(tableName = "produto")
public class Produto{

    @DatabaseField(generatedId = true)
    private Integer produto_id;

    @DatabaseField
    private String nome;

    @DatabaseField(foreign = true, foreignAutoCreate = true, foreignAutoRefresh = true)
    private Empresa empresa;

    //gets/sets
}


@DatabaseTable(tableName = "empresa")
public class Empresa{

    @DatabaseField(generatedId = true)
    private Integer empresa_id;

    @DatabaseField
    private String nome;
}

Statement

/** retorna uma lista por filtro de produtos */
    public List<Produto> findByLike(String value){
        List<Produto> lista = new ArrayList<Produto>();

        try {

            //empresa
            QueryBuilder<Empresa, Integer> empQB = empresaLocalDAO.queryBuilder();

            //produto
            QueryBuilder<Produto, Integer> produtoQB = prodServLocalDAO.queryBuilder();            
                produtoQB.orderBy("nome", true);
                Where where = produtoQB.where();

                empQB.selectColumns("nome");
                empQB.where().like("nome", "%" + value + "%");
                produtoQB.join(empQB);

                where.in("nome", empQB).or().like("nome", "%" + value + "%");

                where.and();
                where.eq("status", 1);
                lista = produtoQB.query();

            Log.i("STM->", produtoQB.prepareStatementString());
        } catch (SQLException e) {
            Log.e(TAG, e.getLocalizedMessage());
        }
        return lista;

    }

Aucun commentaire:

Enregistrer un commentaire