Board logo

标题: spring-mongodb-DBRef的运用 [打印本页]

作者: look_w    时间: 2019-4-20 14:21     标题: spring-mongodb-DBRef的运用

DBref 是mongodb中的引用,与其它集合的关联。


比如 我有一个学生类  学生类下面有班级类    这里班级 就可以设置成 DBref的 形式。

有一个好处就是 当数据库中的 班级类 数据 变动时,学生类 提取出来的也是变动后的数据。


spring-mongodb中的DBRef使用很简单。

只要在引用的类中 在引用字段上加上标识就可以了。存取都按正常的set  和get

下面看官方代码示例:

Person类

    @Document(collection="person")
    @CompoundIndexes({
        @CompoundIndex(name = "age_idx", def = "{'lastName': 1, 'age': -1}")
    })
    public class Person<T extends Address> {
     
      @Id
      private String id;
      @Indexed(unique = true)
      private Integer ssn;
      private String firstName;
      @Indexed
      private String lastName;
      private Integer age;
      @Transient
      private Integer accountTotal;
      @DBRef
      private List<Account> accounts;
      private T address;
     
      
      public Person(Integer ssn) {
        this.ssn = ssn;
      }
          private List<Account> accounts;
        
     
    public List<Account> getAccounts() {
     return accounts;
    }
    public void setAccounts(List<Account> accounts) {
    this.accounts = accounts;
    }
      @PersistenceConstructor
      public Person(Integer ssn, String firstName, String lastName, Integer age, T address) {
        this.ssn = ssn;
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
        this.address = address;
      }

Account类

    @Document
    public class Account {
     
      @Id
      private ObjectId id;
      private Float total;
     
    }....get + set



保存和使用
保存

我们主要到 person类中已经有了 List<Account> accounts的get和set

那我们在保存的地方

List<Account> accounts=new ArrayList<Account>();

Account account=new Account ();

account.setTotal(6.0);

accountreposity.save(account);  //accountreposity是我们定义的存储接口

accounts.add(account);

Person  person =new Person();

person.setAccounts(accounts);

personreposity.save(person); //personreposity是我们定义的存储接口


这样就成功的建立了DBref的关联储备插入。

在数据库中看到的 是类似这样的结构 那就引用成功了




使用

使用的时候

直接 List<Account> accounts=person.getAccounts();

就能取到了,非常方便。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0