Olá… Sou começando substitui a dupla hibernate/mysql por db4objects em um pequeno projeto para um Estudio de Fotografias. Não sou um usuário muito experiente em Java, por isto, minhas camadas de aplicação por vezes são um pouco confusas, mas bem, deixe-lhes explicar como está estruturada.
Criei uma aplicação servidora que nada mais é do que a linha abaixo iniciada em um JFrame que fica aberta até que se feche este JFrame.
ObjectContainer db = Db4o.openClient("localhost", 1357, "root", "pbos");
Minha classe Pedido estava assim:
public class Pedido {
private Integer id;
private Date data;
private Set<Pagamento> pagamentos = new HashSet();
public Set<Pagamento> getPagamentos() {
return this.pagamentos;
}
...
}
E minha classe Pagamento assim:
public class Pagamento {
private Integer id;
private Date data;
private double valor;
}
Estava com problemas para retornar os pagamentos de um pedido com a instrução:
Collection<Pagamento> pagamentos = pedido.getPagamentos();
Foi então que alterei a classe Pedido, retirando a referência à coleção de pagamentos:
public class Pedido {
private Integer id;
private Date data;
...
}
E passei a retornar os pagamentos a partir de S.O.D.A
Query query = db.query(){
query.constrain(Pagamento.class);
query.descend("pedido", pedido);
List<Pagamento> pagamentos = query.execute();
Passei a alterar todo o meu projeto e retirar as referências à coleções das classes e utilizar S.O.D.A para retorná-las.
Existe uma forma de fazer funcionar o db4objects para coleções, sem precisar utilizar S.O.D.A ou Native Query?
Também estou tendo dificuldade para “filtrar” datas como o select * from Pedido where pedido.data >= dataInicial and pedido.data <=dataFinal, com as instruções
query.descend("data").constrain(dataInicial).greater().equal().or(query.descend("data").constrain(dataFinal).smaller().equal())
Por fim, algo estranho aconteceu… Apaguei o arquivo da base de dados, reinicie o servidor, inicie a aplicação, inseri alguns dados em Cliente, Produto, Pedido, mas pagamentos e itens de pedidos não foram retornados nem por S.O.D.A, estava a ponto de desistir de usar até o db4objects, foi então que fechei a aplicação, parei o servidor e iniciei-o novamente e abri novamente a aplicação, então os itens de pedidos e pagamentos puderam ser retornados por S.O.D.A logo de suas inclusões com:
db.set(pagamento);
db.commit();
Tenho usado Netbeans 5.5, Java 1.6 e Db4Objects 6.1.
Ah! eu chamo [db = Db4o.openClient(“localhost”, 1357, “root”, “pbos”);] somente quando inicio a aplicação e nunca fecho, só quando saio dela. Está correto esta forma?
Obrigado a todos e desculpem o volume de questionamentos.
