Boa galera,
Estou com dúvidas “relacionais” em busca de respostas “OO” no uso do Db4o:
1 - Adicionar restrição para não excluir um objeto associado à outro objeto? Ex.: objVenda e objVendaItem.
2 - Adicionar restrição para que o valor do atributo seja único, isto é, que o valor do atributo não seja encontrado em mais de um objeto? Ex.: Atributo CPF na classe cliente.
3 - Como garantir que o objeto seja único, isto é, chave primária?
A um ano atrás fiz um trabalho pra faculdade usando o DB4o, e para as suas perguntas minhas respostas. Não quer dizer que seja as unicas opções, na época foi a unica que eu tinha encontrado, talvez alguma coisa tenha mudado de lá pra cá, eu não cheguei a utilizado recentemente.
1 - Fazer na mão, antes de excluir uma venda, excluir primeiro o item da venda.
2 - Fazer na mão, antes de incluir um registro, primeiro verifica se já não existe uma pessoa com esse cpf, caso tenha atualiza, ou lança uma exceção, senão insere.
3 - Por debaixo dos panos o DB4o cria um id (UUID) pra vc, mais ele não é exposto, quando eu fiz o trabalho eu não precisava de um id sequencial (1,2,3, …) para cada classe(tabela), então eu usei a classe java.util.UUID que gera um id unico (String) para cada objeto persistido, é o mesmo que o DB4o faz, a diferença que ele não expõe esse id gerado.
Para uma breve resposta encontrei um exemplo que configura o atributo de uma classe como UNIQUE. Quando tentar inserir um objeto diferente que tem um valor igual para um atributo UNIQUE será lançada uma exception.
Na versão 8 não existe o método set para ObjectContainer, então troquei pore store() e ele parece não estar funcionando.
Vou voltar a versão 7 para testar com o UniqueFieldValueConstraint.
O problema não é a versão e sim quando existe uma classe pai, onde a pai é que vai dá origem a propriedade que se tornará index.
A solução então foi colocar o indice na classe filha para que o DB4O passe a aceitar então o indice.