如何在 Room 中使用 Joda DateTime 日期作为 id,或者如何在查询中获取日期?

How to use Joda DateTime date as id in Room, or how to get date in query?

我需要编写一个使用日期作为 id 的应用程序,并且我必须能够通过比较日期来更新

@Entity
data class DailyCount(@PrimaryKey
                  var date:DateTime,
                  var summ: Double = 0.0)

这是 DAO

@Query("update DailyCount set summ = :sum where date = :today")
fun updateCash(today: DateTime, sum: Double)

我想做成这样:

@Entity
data class DailyCount(@PrimaryKey
                  var date:Date,//JodaTime containing only date
                  var summ: Double = 0.0)

或者像这样:

@Query("update DailyCount set summ = :sum where date.today = :dateArg.today")
fun updateCash(dateArg: DateTime, sum: Double)

Room 不知道如何将您的主要字段 DateTime 保存到数据库中。

你需要写一个TypeConverter。

public class TypeConverter {
    private static Gson gson = new Gson();

    @TypeConverter
    public static DateTime stringToDate(String data) {

        Type type = new TypeToken<DateTime>() {
        }.getType();

        return gson.fromJson(data, type);
    }

    @TypeConverter
    public static String dateToString(DateTime dateTime) {
        return gson.toJson(dateTime);
    }
}

然后注释你的主键

@PrimaryKey
@TypeConverters(TypeConverter::class.java)
var date:DateTime

我需要编写此查询:

@Query("update DailyCount set summ = :sum where date between  :startTimeOfDay and :endTimeOfDay")
fun updateCash(startTimeOfDay: DateTime, endTimeOfDay: DateTime, sum: Double)

我在这里给了一个开始和结束时间的范围。当我想在今天的 Id

中设置信息时,这种方法 returns 是正确的