【问题标题】:How to create a new relational realmResults?如何创建新的关系领域结果?
【发布时间】:2017-12-05 15:22:44
【问题描述】:

我根据其他领域对象创建了一个领域对象(VolleyballPlayer)。 Female 对象包括所有 Volleyball 对象,但 Male 对象包含一些 Volleyball 对象。

我想创建 VolleyballPlayer 对象,将 FemaleMale 对象分组为性别。但是根据RealmResults我找不到怎么做。

我的领域对象:

public class Volleyball extends RealmObject {
    private int round;
    // ... 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 String 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);
           volleyballPlayer.setGender(getString(R.string.male));

           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);
           volleyballPlayer.setGender(getString(R.string.female));

           ////// 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

【问题讨论】:

  • 排球没有场地。那它为什么存在呢? Male/FemaleStudent有什么区别?所有男性/女性都是学生吗?
  • 是的,所有男性和女性都是学生。
  • sequenceNumbersetNumber 之间有区别吗?还是它们是同一件事,除了在两个不同的类别中?在女性/男性中设置Volleyball 到底意味着什么?这意味着他们已经打过 1 场特定的排球比赛?更多的排球比赛怎么样?
  • 这些字段之间没有逻辑-> sequence 和 setNumber。你可以看到我编辑的答案
  • 设置或序列号只有数字和没关系。你不在乎这些。男性专用对象是腰带,女性专用对象不再是扣子:)

标签: android database realm


【解决方案1】:

我个人会为此利用“使用鉴别器字段的单表继承”的力量。

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();

【讨论】:

  • 非常感谢,但实际上我的问题是如何创建 VolleyballPlayer 领域结果。
  • 正如我所说,我会将男性和女性合并在一起。这将使您的查询变得微不足道。
  • 我的女球员、男球员和男排球都是空的。找不到怎么填?
  • 所有女学生都打排球,我如何从所有打排球的球员(女性)中提取男球员?
  • 我不知道你在做什么了。