2017-12-05 3 views
0

다른 영역 객체에 따라 영역 객체 (VolleyballPlayer)를 만들었습니다. 여성 개체가 배구 개체를 포함하지만 남성 개체가 Volleyball 개체가 일부 있습니다.새로운 관계형 realmResults를 만드는 방법은 무엇입니까?

나는 VolleyballPlayer에게 성별 그룹 여성남성 객체 개체를 만들려고합니다. 그러나 나는 RealmResults에 따라 그것을하는 방법을 발견 할 수 없었다.

내 영역 객체 :

public class Volleyball extends RealmObject { 
    private int round; 
    // ... Generated getters and setters ... 
} 

public class Gender extends RealmObject { 
    private String gender; 
    // ... Generated getters and setters ... 
} 

//...All females play volleyball. 
public class Female extends RealmObject { 
    private Volleyball volleyball; 
    private int clasp; 
    // ... Generated getters and setters ... 
} 

public class Male extends RealmObject { 
    private Volleyball volleyball; 
    private int belt; 
    // ... Generated getters and setters ... 
} 

새로운 객체 :

public class VolleyballPlayer extends RealmObject { 
    private Volleyball volleyball; 
    private Gender gender; 

    // ... Generated getters and setters ... 
} 

내가 allFemale 및 allMale realmResults을 가지고 있지만 내가 ALLPlayer 웹 realmResults을하지 않았습니다.

RealmResults<Female> allFemales = mRealm.where(Female.class).findAll(); 
RealmResults<Male> allMales = mRealm.where(Male.class).findAll(); 

모든 여학생 배구를하고 난에서 배구를 (여성의) 모든 선수를 통해 남성 선수는 어떻게 추출 할 수 있습니까? 내가 코드 아래에 쓰기 영역의 방법이있다 :

public void setAllVolleyballPlayers(Realm mRealm) { 

     Realm mRealm = getRealm(); 

     mRealm.beginTransaction(); 

     addAllMalePlayers(mRealm); 
     addAllFemalePlayers(mRealm); 

     mRealm.commitTransaction(); 
    } 

    private void addAllMalePlayers(Realm mRealm) { 

     RealmResults<Male> allMalePlayers = new MalePlayersQueries().getAllMales(mRealm); 

     mRealm.beginTransaction(); 

     if (allMalePlayers != null && allMalePlayers.size() > 0) { 

      VolleyballPlayer volleyballPlayer = mRealm.createObject(VolleyballPlayer.class); 

      Gender gender = mRealm.createObject(Gender.class); 
      gender.setGender(getString(R.string.male)); 

      volleyballPlayer.setGender(gender); 

      for (Male male : allMales) { 

      VolleyballPlayer volleyballPlayer = 
      mRealm.createObject(VolleyballPlayer.class); 
      volleyballPlayer.setVolleyball(male.getVolleyball()); 

      } 
     } 
    } 

    private void addAllFemalePlayers(Realm mRealm) { 

      RealmResults<Female> allFemales = new FemaleQueries().getAllPlayers(mRealm); 

      VolleyballPlayer volleyballPlayer = mRealm.createObject(VolleyballPlayer.class); 

      Gender gender = mRealm.createObject(Gender.class); 
      gender.setGender(getString(R.string.female)); 

      volleyballPlayer.setGender(gender); 

      ////// All female students play volleyball and how can I extract male players from all the players(in females) who play this volleyball and get females 
} 

와 나는 테이블의 끝에서 보여주고 싶은 :

**Volleyball Players** 

    **Female** 

    Emma 
    Olivia 
    Sophia 

    **Male** 

    John 
    Jame 
+0

배구 필드는 없습니다 할 수 있습니다. 그럼 왜 존재합니까? '남자'/'여자'와'학생'의 차이점은 무엇입니까? 모든 남성/여성들도 학생입니까? – EpicPandaForce

+0

예 모든 남성과 여성은 학생입니다. – propoLis

+0

'sequenceNumber'와'setNumber' 사이에 차이점이 있습니까? 아니면 두 가지 다른 수업을 제외하고는 똑같습니까? 여성/남성에 '배구'를 설정한다는 것은 정확히 무엇을 의미합니까? 그것은 그들이 배구의 특정 게임을 한 것을 의미합니까? 배구의 더 많은 게임은 어떨까요? – EpicPandaForce

답변

2

가 개인적으로 나는 싱글 "의 힘을 활용하는 것 discriminator field를 이용한 table-inheritance "를 수행한다.

public class Volleyball extends RealmObject { 
    private int round; 

    @LinkingObjects("volleyball") 
    private final RealmResults<VolleyBallPlayer> playedBy = null; 
    // ... Generated getters and setters ... 
} 

public class VolleyBallPlayer extends RealmObject { 
    private Volleyball volleyball; 
    @Index 
    private String gender; 
    private int femaleClasp; // 0, or with Integer `null` if male 
    private int maleBelt; // 0, or with Integer `null` if female 
    // ... Generated getters and setters ... 
} 

이제

RealmResults<VolleyBallPlayer> femalePlayers = realm.where(VolleyBallPlayer.class) 
    .equalTo("gender", Gender.FEMALE.name()).findAll(); 
RealmResults<VolleyBallPlayer> malePlayers = realm.where(VolleyBallPlayer.class) 
    .equalTo("gender", Gender.MALE.name()).findAll(); 

심지어

RealmResults<Volleyball> maleVolleyballs = realm.where(Volleyball.class) 
    .equalTo("playedBy.gender", Gender.MALE.name()).findAll(); 
+0

정말 고마워하지만 실제로 내 질문은 VolleyballPlayer realmresults를 만드는 방법입니다. – propoLis

+0

당신은 내 편집 된 대답을 볼 수 있고 제발 도와주세요 – propoLis

+0

내가 말했듯이, 나는 남성과 여성을 함께 병합합니다. 그것은 당신의 질문을 하찮게 만듭니다. – EpicPandaForce

관련 문제