九、BDB OneToMany

BDB JE对复杂数据的储存
(二)、OneToMany关系的存储
班级类:
@Entity
public class Classs {
@PrimaryKey
String classsId;

@SecondaryKey(relate=Relationship.ONE_TO_ONE)
String classsName;

@SecondaryKey(relate=Relationship.ONE_TO_MANY,relatedEntity=Student.class,onRelatedEntityDelete=DeleteAction.CASCADE)
Set<String> setStudent=new HashSet<String>();

public Classs(){
}
public Classs(String id,String name){
  this.classsId=id;
  this.classsName=name;
}

public Classs(String id,String name,Set<String> set){
  this.classsId=id;
  this.classsName=name;
  this.setStudent=set;
}
}
学生类:
@Entity
public class Student {
@PrimaryKey
String studentId;

@SecondaryKey(relate=Relationship.MANY_TO_ONE)
String studentName;

@SecondaryKey(relate=Relationship.MANY_TO_ONE,relatedEntity=Classs.class,onRelatedEntityDelete=DeleteAction.NULLIFY)
String classsId;

@SecondaryKey(relate=Relationship.MANY_TO_MANY,relatedEntity=Teacher.class,onRelatedEntityDelete=DeleteAction.NULLIFY)
Set<String> setTeacher=new HashSet<String>();

Student(){
}
public Student(String id,String name,String cId,Set<String> set){
  this.studentId=id;
  this.studentName=name;
  this.classsId=cId;
  this.setTeacher=set;
}
@Override
public String toString() {
  return "学生id:"+this.studentId+" 姓名: "+this.studentName;
}
}

老师类:
@Entity
public class Teacher {
@PrimaryKey
String teacherId;

@SecondaryKey(relate=Relationship.MANY_TO_ONE)
String teacherName;

public Teacher(){
}

public Teacher(String id,String name){
  this.teacherId=id;
  this.teacherName=name;
}

@Override
public String toString() {
  return "老师ID:"+this.teacherId+"老师Name"+this.teacherName;
}
}

关系类:
public class Accessor {

PrimaryIndex<String, Teacher> teacherById;
SecondaryIndex<String, String, Teacher> teacherByName;

PrimaryIndex<String, Classs> classsById;
SecondaryIndex<String, String, Classs> classsByName;
SecondaryIndex<String, String, Classs> classsBySetStudent;

PrimaryIndex<String, Student> studentById;
SecondaryIndex<String, String, Student> studentByName;
SecondaryIndex<String, String, Student> studentByCid;
SecondaryIndex<String, String, Student> studentBySetTeacher;

public Accessor(EntityStore store) throws DatabaseException{
  teacherById=store.getPrimaryIndex(String.class, Teacher.class);
  teacherByName=store.getSecondaryIndex(teacherById, String.class, "teacherName");
  
  classsById=store.getPrimaryIndex(String.class, Classs.class);
  classsByName=store.getSecondaryIndex(classsById, String.class, "classsName");
  classsBySetStudent=store.getSecondaryIndex(classsById, String.class, "setStudent");
  
  studentById=store.getPrimaryIndex(String.class, Student.class);
  studentByName=store.getSecondaryIndex(studentById, String.class, "studentName");
  studentByCid=store.getSecondaryIndex(studentById, String.class, "classsId");
  studentBySetTeacher=store.getSecondaryIndex(studentById, String.class, "setTeacher");
}
}

test类:
/**
* 测试
* @author Administrator
* 班级  学生  老师
* 1------->* 1----->*
*
*/
public class testOne2Many {

public static void main(String[] args) {
  Environment env=null;
  EnvironmentConfig envconfig=new EnvironmentConfig();
  envconfig.setAllowCreate(true);
  envconfig.setTransactional(true);
  StoreConfig storeconfig=new StoreConfig();
  storeconfig.setAllowCreate(true);
  storeconfig.setTransactional(true);
  EntityStore entityStore=null;
  try {
   env=new Environment(new File("d://bdb//onetomanyje"),envconfig);
   entityStore=new EntityStore(env,"Store",storeconfig);
   Accessor dao=new Accessor(entityStore);
  
   PrimaryIndex<String, Teacher> primaryByTeacher=dao.teacherById;
   PrimaryIndex<String, Classs> primaryByClasss=dao.classsById;
   PrimaryIndex<String, Student> primaryByStudent=dao.studentById;
   SecondaryIndex<String, String, Student> studentByCid=dao.studentByCid;
   Transaction txn=env.beginTransaction(null, null);
  
   Teacher t1=new Teacher("100001","王伟");
   Teacher t2=new Teacher("100002","赵奇");
   Teacher t3=new Teacher("100003","刘利");
  
   Set<String> setTeacher1=new HashSet<String>();
   setTeacher1.add("100001");
   setTeacher1.add("100002");
  
   Set<String> setTeacher2=new HashSet<String>();
   setTeacher2.add("100001");
   setTeacher2.add("100003");
  
   Set<String> setTeacher3=new HashSet<String>();
   setTeacher3.add("100003");
   setTeacher3.add("100002");
  
   Student stu1=new Student("4200106310001","张三","000001",setTeacher1);
   Student stu2=new Student("4200106310002","李四","000001",setTeacher1);
   Student stu3=new Student("4200106310003","张三","000001",setTeacher1);
   Student stu4=new Student("4200106310004","王五","000001",setTeacher1);
  
   Student stu5=new Student("4200106310005","赵六","000002",setTeacher2);
   Student stu6=new Student("4200106310006","王五","000002",setTeacher2);
   Student stu7=new Student("4200106310007","李四","000002",setTeacher2);
   Student stu8=new Student("4200106310008","李利","000002",setTeacher2);
  
   Student stu9=new Student("4200106310009","徐咪","000003",setTeacher3);
   Student stu10=new Student("4200106310010","刘洪","000003",setTeacher3);
   Student stu11=new Student("4200106310011","吴锋","000003",setTeacher3);
   Student stu12=new Student("4200106310012","许珊","000003",setTeacher3);
  
   Classs c1=new Classs("000001","一年一班");
   Classs c2=new Classs("000002","一年二班");
   Classs c3=new Classs("000003","一年三班");
  
   primaryByTeacher.put(txn, t1);
   primaryByTeacher.put(txn, t2);
   primaryByTeacher.put(txn, t3);
  
   primaryByClasss.put(txn, c1);
   primaryByClasss.put(txn, c2);
   primaryByClasss.put(txn, c3);
  
   primaryByStudent.put(txn, stu1);
   primaryByStudent.put(txn, stu2);
   primaryByStudent.put(txn, stu3);
   primaryByStudent.put(txn, stu4);
   primaryByStudent.put(txn, stu5);
   primaryByStudent.put(txn, stu6);
   primaryByStudent.put(txn, stu7);
   primaryByStudent.put(txn, stu8);
   primaryByStudent.put(txn, stu9);
   primaryByStudent.put(txn, stu10);
   primaryByStudent.put(txn, stu11);
   primaryByStudent.put(txn, stu12);
  
   EntityCursor<Student> ecStudent=null;
   EntityCursor<Classs> ecClasss=null;
  
   System.out.println("----------------通过在student中的cid得到班级里面的学生--------------------------");
   ecClasss=primaryByClasss.entities(txn,null);
   for(Classs c:ecClasss){
    System.out.println("--------------"+c.classsName+"--------------------"+c.setStudent.toString());
    ecStudent=studentByCid.subIndex(c.classsId).entities(txn, null);
    for(Student s:ecStudent){
     StringBuffer strbuf=new StringBuffer();
     Iterator<String> it=s.setTeacher.iterator();
     while(it.hasNext()){
      strbuf.append(primaryByTeacher.get(txn, it.next(), LockMode.DEFAULT).teacherName+" ");
     }
     System.out.println(s.toString()+"  班级名: "+c.classsName+" 所有老师: "+strbuf.toString());
    }
    ecStudent.close();
   }
   ecClasss.close();
  
   System.out.println("---------------------修改班级中SetStudent-------------------------------");
   ecClasss=primaryByClasss.entities(txn,null);
   for(Classs c:ecClasss){
    ecStudent=studentByCid.subIndex(c.classsId).entities(txn, null);
    for(Student s:ecStudent){
     c.setStudent.add(s.studentId);
    }
    ecClasss.update(c);
    ecStudent.close();
   }
   ecClasss.close();
  
   System.out.println("------------通过得到班级中的setStudent得到学生的信息--------------------");
   ecClasss=primaryByClasss.entities(txn,null);
   for(Classs c:ecClasss){
    System.out.println("--------------"+c.classsName+"--------------------"+c.setStudent.toString());
    Iterator<String> it=c.setStudent.iterator();
    while(it.hasNext()){
     StringBuffer strbuf=new StringBuffer();
     Student s=primaryByStudent.get(txn,it.next(),LockMode.DEFAULT);
     Iterator<String> i=s.setTeacher.iterator();
     while(i.hasNext()){
      strbuf.append(primaryByTeacher.get(txn, i.next(), LockMode.DEFAULT).teacherName+" ");
     }
     System.out.println(s.toString()+"  班级名: "+c.classsName+" 所有老师: "+strbuf.toString());
    }
   }
   ecClasss.close();
   txn.commit();
   entityStore.close();
   env.cleanLog();
   env.close();
  }catch(Exception e){
   e.printStackTrace();
  }
}
}  
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值