2017-08-22 7 views
0
public class ChallengeDB extends RealmObject { 

    @PrimaryKey 
    private int challengeId; 


    private String targetType; 
    private RealmList<ChallengeTargetDB> ChallengeTargetDB; 
    private boolean isTargetPerParticipant; 
} 



    public class ChallengeTargetDB extends RealmObject { 
     @PrimaryKey 
     private int targetId; 
     private String targetName; 
     private String description; 
     private long targetValue; 
     private int targetStep; 
     private boolean isPassed; 
} 

私はこれらの2つのテーブルを以下のようにリンクしており、特定のchallengeIdの最大「targetValue」値を取得する必要があります。レルムAndroidオブジェクトを子オブジェクトに集約

RealmResults<ChallengeDB> challengeDBs = realm.where(ChallengeDB.class) 
        .equalTo(WorkoutCashConstants.COLUMN_CHALLENGE_ID, challengeDB.getChallengeId()).findAll(); 

      long max = challengeDBs.max("ChallengeTargetDB.targetValue").longValue(); 

私は例外がリンクされたオブジェクトのフィールドの集計がサポートされていない、言うように

java.lang.IllegalArgumentException: Aggregates on child object fields are not supported: ChallengeTargetDB.targetValue 

答えて

0

を次のように例外を終了するまで取得は次のように私が書かれているためにクエリがあります。自分で計算する必要があります。

これを試してみてください:

Number max = null; 
for (ChallengeDB item : challengeDBs) { 
    if (max == null) { 
     max = item.ChallengeTargetDB.max(); 
    } else { 
     Number tmp = item.ChallengeTargetDB.max(); 
     max = max.longValue() > tmp.longValue() ? max : tmp; 
    } 
} 
+0

私はすでに同様の方法を使用して、最大値を取得しています。しかし、私のクエリは、これは機能要求ですか? – Sutirth

1

public class ChallengeTargetDB extends RealmObject { 
    @PrimaryKey 
    private int targetId; 
    private String targetName; 
    private String description; 
    private long targetValue; 
    private int targetStep; 
    private boolean isPassed; 

    @LinkingObjects("ChallengeTargetDb") 
    private final RealmResults<ChallengeDb> targetOfChallenge = null; 
    } 

レルム3.5.0+で次に

RealmResults<ChallengeTargetDB> challengeDBs = realm.where(ChallengeTargetDB.class) 
       .equalTo("targetOfChallenge." + WorkoutCashConstants.COLUMN_CHALLENGE_ID, challengeDB.getChallengeId()).findAll(); 

     long max = challengeDBs.max("targetValue").longValue(); 
+0

どうすればリンクオブジェクトの移行も提供する必要がありますか? – Sutirth

+0

@LinkingObjectsは*実際に*スキーマの一部ではないので、マイグレーションを引き起こすべきではありません。 – EpicPandaForce

+0

あなたに戻って申し訳ありませんので、遅れて何かに取り組んでいました。レルムのバージョンアップとオブジェクトのリンクはうまく動作します。助けをしてくれてありがとう。 – Sutirth

関連する問題