Как избежать дублирования объектов в базе данных DB4o

Student s1 = new Student(); s1.rollNo = "44"; s1.name = "kk"; db4o().save(s1); Student s2 = new Student(); s2.rollNo = "44"; s2.name = "kk"; db4o().save(s2); 

Здесь я сохраняю два объекта s1 и s2 в базе данных DB4o, и оба объекта сохраняются, даже если у них есть дублирующаяся информация, что я хочу – это тот же самый rollNo ученик должен быть сохранен только один раз, как реляционные базы данных с использованием первичного ключа. Я знаю, что DB4o сохраняет объекты на основе ссылочного адреса, исправьте меня, если я ошибаюсь. Пожалуйста, дайте мне знать, если есть какой-либо способ добиться функциональности первичного ключа, чтобы избежать избыточности данных в DB4o.

благодаря

    Db4o отслеживает объект по их идентичности. Поэтому, если вы создадите новый объект с «новым», он будет считаться новым объектом. Если вы хотите обновить объект, вам нужно получить этот объект и изменить его. Так вот:

     Student toUpdate = db4o.query(new Predicate<Student>() { @Override public boolean match(Student student) { return pilot.rollNo.equals("44"); } }).get(0); toUpdate.name ="newName"; db4o.store(toUpdate); // Updated 

    Вот и все. Db4o allway отслеживает фактические объекты. Не значения.

    Обратите внимание, что вы можете добавить уникальные ограничения, чтобы избежать ошибок. Дополнительные сведения об обновлении см. В документации: http://community.versant.com/documentation/reference/db4o-8.1/java/reference/Content/basics/update_concept.htm.

    В основном у вас есть 2 варианта:

    1. Добавьте в конфигурацию UniqueFieldValueConstraint (в этом случае нарушения будут сообщаться как исключения)

    2. Выполните запрос (который в основном является тем, что UniqueFieldValueConstraint будет делать в любом случае) и проверьте, существует ли такой объект в db.

    Надеюсь это поможет.