Nossa, o post tem tanto tempo que nem sei se já achou a resposta, mas qualquer coisa fica registrada caso mais alguém precise.
Dada a seguinte classe:
class Veiculo {
private Long chassi;
// outros detalhes da classe.
}
Para tornar o atributo chassi único no Db4o, basta configurar a classe em um objeto Configuration, da seguinte forma:
EmbeddedConfiguration configuracao = Db4oEmbedded.newConfiguration();
// Primeiro deve-se indexar o atributo.
configuracao.common().objectClass(Veiculo.class).objectField("chassi").indexed(true);
// Depois criar a restrição de unicidade nele.
configuracao.common().add(new UniqueFieldValueConstraint(Veiculo.class, "chassi"));
Agora ao salvar uma instância de Veiculo, se o valor do chassi já existir no banco, será lançada uma UniqueFieldValueConstraintViolationException.
EmbeddedObjectContainer container = Db4oEmbedded.openFile(configuracao, NOME_DO_BANCO);
try {
container.store(instanciaComValorDeChassiDuplicado);
container.commit();
} catch (UniqueFieldValueConstraintViolationException e) {
// Sabe-se que a "chave primária" foi violada...
} finally {
container.close();
}
Bom, espero que isso ajude ou você ou alguém que precise… =)