如何避免DB4o数据库中的重复对象

时间:2014-02-16 18:22:35

标签: java android .net android-sqlite 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);

这里我在DB4o数据库中保存了两个对象s1和s2,即使它们有重复的信息也保存了这两个对象,我想要的是同一个rollNo学生应该只保存一次就像使用主键的关系数据库一样。我知道DB4o根据参考地址保存对象,如果我错了就纠正我。如果有任何方法可以实现主键功能以避免DB4o中的数据冗余,请告诉我。

谢谢

2 个答案:

答案 0 :(得分:2)

db4o按其身份跟踪对象。因此,如果使用“new”创建新对象,则会将其视为新对象。如果要更新对象,则需要获取该对象并进行更改。所以这里:

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跟踪实际对象。不是价值观。

请注意,您可以add unique constrains避免错误。有关更新的更多信息,请参阅文档:http://community.versant.com/documentation/reference/db4o-8.1/java/reference/Content/basics/update_concept.htm

答案 1 :(得分:1)

基本上你有两个选择:

  1. 在您的配置中添加UniqueFieldValueConstraint(在这种情况下,违规将被报告为例外)

  2. 执行查询(基本上是UniqueFieldValueConstraint将执行的操作)并检查数据库中是否已存在此类对象。

  3. 希望这有帮助。