Duvida Persistencia SQLite no Android

Olá pessoal, estou com uma dúvida que estou achando bem boba, mas queria saber de vocês qual a melhor maneira de fazer minha persistência…

Seguinte, tenho várias classes modelo no meu projeto Android, e estou em dúvida se eu devo utilizar Foreign Key para o relacionamento entre elas ou devo criar atributos uma dentro da outra???

Exemplos:

[code]public class Cliente {

   private Long id;
   private String nome;
   private String endereco;
   private String localidade;
   private String logotipo;

   //getters and setters

}

public class Projeto {

   private Long id;
   private String codigo;
   private String descricao;
   private Date data;

private Long idCliente;

//getters and setters
}[/code]

OU

[code]public class Cliente {

   private Long id;
   private String nome;
   private String endereco;
   private String localidade;
   private String logotipo;

   //getters and setters

}

public class Projeto {

   private Long id;
   private String codigo;
   private String descricao;
   private Date data;

private Cliente cliente;

//getters and setters
}[/code]

No caso da segunda opção, como ficaria o banco SQLite para essas classes ??? Algum Framework me ajudaria? Vi o pessoal falando de alguns (jpa-android, droidPersistence, Andorm), me recomendam algum?

Obrigado…

Não conheço framework orm para android.
Acho que a criação da FK no sqlite independe da forma que você vai fazer na classe, pode ser com Integer idCliente ou Cliente cliente. Só vai mudar na forma com que você vai tratar as informações.

Olá, sou o criador do AndOrm.
E recomendaria criar uma ‘FK’ mesmo.
Coloquei entre aspas pq na verdade o AndOrm não implementa isso ainda (está saindo na nova versão que está em desenvolvimento).
Então vc poderia fazer por exemplo:

class Cliente {...}

class Projeto {
    //outros atributos
    private Integer clienteId;

    public Cliente getCliente() {
        //faz a busca no banco pelo id e retorna
    }
}

PS: Só destacando que o AndOrm não implementa isso ainda, pq vi a necessidade de implementar LazyLoading nas consultas para não sobrecarregar as entidades na hora da busca. Mas já achei uma forma de fazer isso e está em desenvolvimento.
Aproveito para convidar a colaborar com o projeto, qualquer ajuda (até um Wiki que o projeto precisa :lol: ), é muito bem-vinda!

opa, obrigado j0nny, mas tenho outra dúvida, devo deixar o get sempre buscando diretamente do banco? como você faria?

Não é a melhor opção, mas nesse caso, teria um repositório/dao de Cliente dentro da sua entidade Projeto.

Para melhorar, poderia ter algo assim:
ter um atributo Cliente chamado cliente, e quando fosse dar um get, vc verificaria se cliente é nulo, se não for, verifica se o id desse cliente é igual o clienteId, se for, apenas retorne, caso contrário, faça a busca no banco de atribua para ‘cliente’ e o retorne.

Não é a melhor opção, mas nesse caso, teria um repositório/dao de Cliente dentro da sua entidade Projeto.

Para melhorar, poderia ter algo assim:
ter um atributo Cliente chamado cliente, e quando fosse dar um get, vc verificaria se cliente é nulo, se não for, verifica se o id desse cliente é igual o clienteId, se for, apenas retorne, caso contrário, faça a busca no banco de atribua para ‘cliente’ e o retorne.[/quote]

Putz eu tinha pensado exatamente nisso…rs mas queria ouvir sua opinião… obrigado amigo…