gpt4 book ai didi

android - 使用 Room 的 @Relation 和 ORDER BY

转载 作者:行者123 更新时间:2023-12-04 07:32:20 26 4
gpt4 key购买 nike

我尝试了 Room 图书馆,顺便说一下,这是一个非常令人印象深刻的图书馆!
所以我有两个 @Entity和一个由两个实体组成的 POJO。
我的第一个实体:

@Entity(tableName = "colis")
public class ColisEntity {
@PrimaryKey
private String idColis;
private String label;
}
我的第二个带有外键的实体:
@Entity(tableName = "step",
foreignKeys = @ForeignKey(
entity = ColisEntity.class,
parentColumns = "idColis",
childColumns = "idColis",
onDelete = CASCADE
)
)
public class StepEntity {
@PrimaryKey(autoGenerate = true)
private Integer idStep;
private String idColis;
private Long date;
}
我的 POJO 与 @Relation :
public class ColisWithSteps {
@Embedded
public ColisEntity colisEntity;

@Relation(parentColumn = "idColis", entityColumn = "idColis")
public List<StepEntity> stepEntityList;
}
所有这些东西都适用于我的 @Dao和存储库。
但我想要我的 @Relation List<StepEntity>按日期订购,我不希望 StepEntity 实现 Comparable 并制作 Collections.sort() .
因为我认为排序应该由数据库完成,而不是在查询之后。
任何想法 ?
谢谢。

最佳答案

我知道 OP 对 Collection.Sort() 说不,但考虑到这种情况,它似乎是最干净的方法。正如我上面所说,我认为最好避免每次需要访问数据时都必须进行单独的查询。首先实现 Comparable。

public class StepEntity implements Comparable<StepEntity >{
@PrimaryKey(autoGenerate = true)
private Integer idStep;
private String idColis;
private Long date;

@Override
public int compareTo(@NonNull StepEntity stepEntity ) {
int dateOther = stepEntity.date;

//ascending order
return this.date - dateOther;

//descending order
//return dateOther - this.date;
}
}
现在要使用它,在您现有的 @Relation POJO 中添加一个方法包装器
public class ColisWithSteps {
@Embedded
public ColisEntity colisEntity;

@Relation(parentColumn = "idColis", entityColumn = "idColis")
public List<StepEntity> stepEntityList;

//add getter method
public List<StepEntity> getSortedStepEntityList(){
Collections.sort(stepEntityList);
return stepEntityList;
}
}

关于android - 使用 Room 的 @Relation 和 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48315261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com