(二)、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
setStudent=new HashSet (); - public Classs(){
- }
- public Classs(String id,String name){
- this.classsId=id;
- this.classsName=name;
- }
- public Classs(String id,String name,Set
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
setTeacher=new HashSet (); - Student(){
- }
- public Student(String id,String name,String cId,Set
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
teacherById; - SecondaryIndex
teacherByName; - PrimaryIndex
classsById; - SecondaryIndex
classsByName; - SecondaryIndex
classsBySetStudent; - PrimaryIndex
studentById; - SecondaryIndex
studentByName; - SecondaryIndex
studentByCid; - SecondaryIndex
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
primaryByTeacher=dao.teacherById; - PrimaryIndex
primaryByClasss=dao.classsById; - PrimaryIndex
primaryByStudent=dao.studentById; - SecondaryIndex
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
setTeacher1=new HashSet (); - setTeacher1.add("100001");
- setTeacher1.add("100002");
- Set
setTeacher2=new HashSet (); - setTeacher2.add("100001");
- setTeacher2.add("100003");
- Set
setTeacher3=new HashSet (); - 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
ecStudent=null; - EntityCursor
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
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
it=c.setStudent.iterator(); - while(it.hasNext()){
- StringBuffer strbuf=new StringBuffer();
- Student s=primaryByStudent.get(txn,it.next(),LockMode.DEFAULT);
- Iterator
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();
- }
- }
- }